CostLineTemplateRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.costing.CostGroup;
import com.tradecloud.domain.costing.CostLineTemplate;
import com.tradecloud.dto.base.StaticDataSearch;
import com.tradecloud.repository.CostLineTemplateRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
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;
/**
* Default implementation of the {@link CostLineTemplateRepository} interface.
*
* @author ralph
*/
@Repository(value = "costLineTemplateRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class CostLineTemplateRepositoryImpl extends RepositoryBaseImpl<CostLineTemplate, StaticDataSearch> implements CostLineTemplateRepository {
private static final long serialVersionUID = 1L;
private final String FIND_REG_NAME_AND_COST_GROUP = """
SELECT c
FROM CostLineTemplate c
WHERE c.costGroup = :group
AND LOWER(TRIM(c.name)) = LOWER(TRIM(:name))
""";
@Override
public List<CostLineTemplate> findByCostGroupOrderByCostLineName(CostGroup costGroup) {
if (costGroup == null) {
throw new NullPointerException("Must supply a valid costGroup");
}
List<CostLineTemplate> list = (List<CostLineTemplate>) findByNamedQueryAndNamedParam("costLineTemplate.byCostGroupOrderedByCostLineName",
"costGroup", costGroup);
/* if (list == null || list.isEmpty()) {
throw new IllegalStateException("No CostLineTemplates configured for the CostGroup " + costGroup + ". Please configure and retry.");
}*/
return list;
}
@Override
public boolean checkCostLineTemplateExistUsingCode(String code) {
Criteria searchCriteria = getSessionCustom().createCriteria(CostLineTemplate.class);
searchCriteria.add(Restrictions.ilike("code", code.trim()));
@SuppressWarnings("unchecked") CostLineTemplate result = (CostLineTemplate) searchCriteria.uniqueResult();
if (result != null) {
return true;
} else {
return false;
}
}
@Override
public CostLineTemplate findByCode(String code) {
Criteria searchCriteria = getSessionCustom().createCriteria(CostLineTemplate.class);
searchCriteria.add(Restrictions.ilike("code", code.trim()));
return (CostLineTemplate) searchCriteria.uniqueResult();
}
@Override
public long count(StaticDataSearch search) {
DetachedCriteria criteria = createCriteria(search);
return getExecutableCriteriaCount(criteria);
}
@Override
public List<CostLineTemplate> search(StaticDataSearch search) {
DetachedCriteria criteria = createCriteria(search);
List<CostLineTemplate> staticDataList = getExecutableCriteriaList(criteria, search.getSearchMetaParams(), "costGroup", true);
return staticDataList;
}
private DetachedCriteria createCriteria(StaticDataSearch search) {
DetachedCriteria searchCriteria = DetachedCriteria.forClass(CostLineTemplate.class);
addSearchRestrictions(searchCriteria, search);
return searchCriteria;
}
private void addSearchRestrictions(DetachedCriteria criteria, StaticDataSearch search) {
if (search.getName() != null && !search.getName().trim().isEmpty()) {
criteria.add(Restrictions.ilike("name", LIKE + search.getName() + LIKE));
}
if (search.getCode() != null && !search.getCode().trim().isEmpty()) {
criteria.add(Restrictions.ilike("code", LIKE + search.getCode() + LIKE));
}
}
@Override
public CostLineTemplate findRegNameAndCostGroup(CostGroup costGroup, String name) {
Query query = getCurrentSession().createQuery(FIND_REG_NAME_AND_COST_GROUP);
query.setParameter("group", costGroup);
query.setParameter("name", name);
query.setMaxResults(1);
return (CostLineTemplate) query.uniqueResult();
}
}