StaticDataSearchRepositoryImpl.java
package com.tradecloud.repository.staticdata;
import com.tradecloud.common.base.StaticDataEntityBase;
import com.tradecloud.dto.base.PlaceOfCustomsSearch;
import com.tradecloud.dto.base.StaticDataSearch;
import com.tradecloud.repository.GeneralRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository(value = "staticDataSearchRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class StaticDataSearchRepositoryImpl extends RepositoryBaseImpl<StaticDataEntityBase, StaticDataSearch>
implements StaticDataSearchRepository {
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(StaticDataSearchRepositoryImpl.class);
@Autowired
private GeneralRepository generalRepository;
@SuppressWarnings("unchecked")
@Override
public List<StaticDataEntityBase> search(StaticDataSearch search) {
DetachedCriteria criteria = null;
try {
criteria = DetachedCriteria.forClass(Class.forName(search.getTableName()));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// criteria.addOrder(Order.asc("name"));
// criteria.addOrder(Order.asc("id"));
// search.getSearchMetaParams().setOrderBy("id");
addSearchRestrictions(criteria, search);
List<StaticDataEntityBase> staticDataList = getExecutableCriteriaList(criteria, search.getSearchMetaParams(), "name", true);
return staticDataList;
}
@SuppressWarnings("unchecked")
@Override
public long countByCriteria(StaticDataSearch search) {
DetachedCriteria criteria = null;
try {
criteria = DetachedCriteria.forClass(Class.forName(search.getTableName()));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// criteria.addOrder(Order.asc("name"));
addSearchRestrictions(criteria, search);
long count = getExecutableCriteriaCount(criteria);
return count;
}
private void addSearchRestrictions(DetachedCriteria criteria, StaticDataSearch search) {
log.debug("addSearchRestrictions " + search.toString());
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
if (search.getName() != null && search.getName().trim().length() > 0) {
criteria.add(Restrictions.ilike("name", LIKE + search.getName() + LIKE));
}
if (search.getCode() != null && search.getCode().trim().length() > 0) {
criteria.add(Restrictions.ilike("code", LIKE + search.getCode() + LIKE));
}
if (search.getCountry() != null) {
criteria.add(Restrictions.eq("country", search.getCountry()));
}
if (search.getTableName().equals("com.tradecloud.domain.place.PlaceOfCustom") || search.getTableName().equals("PlaceOfCustom")) {
PlaceOfCustomsSearch placeOfCustomsSearch = (PlaceOfCustomsSearch) search;
if (placeOfCustomsSearch.getPlaceOfCustomType() != null) {
criteria.add(Restrictions.eq("type", placeOfCustomsSearch.getPlaceOfCustomType()));
}
}
if (search.getTableName().equals("com.tradecloud.domain.place.FinalDestination") || search.getTableName().equals("FinalDestination")) {
if (CollectionUtils.isNotEmpty(search.getOrganisationalUnitList())) {
criteria.createAlias("organisationalUnits", "organisationalUnit");
criteria.add(Restrictions.in("organisationalUnit", search.getOrganisationalUnitList()));
} else if (search.getOrganisationalUnit() != null) {
criteria.createAlias("organisationalUnits", "organisationalUnit");
criteria.add(Restrictions.eq("organisationalUnit.id", search.getOrganisationalUnit().getId()));
}
}
}
}