ToleranceRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.domain.costing.Tolerance;
import com.tradecloud.domain.duties.CustomsDutyCaptureLevel;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.repository.ToleranceRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
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 {@code ToleranceRepository} interface.
 */
@Repository(value = "toleranceRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class ToleranceRepositoryImpl extends RepositoryBaseImpl<Tolerance, Object> implements ToleranceRepository {

    private static final long serialVersionUID = 1L;

    @Override
    public List<Tolerance> findByLevelOrderbyOrgUnit(CustomsDutyCaptureLevel captureLevel,
                                                     OrganisationalUnit organisationalUnit, ShippingMode shippingMode) {
        if (captureLevel == null) {
            throw new NullPointerException("Must supply a valid CustomsDutyCaptureLevel");
        }

        if (organisationalUnit != null) {
            String[] names = {"organisationalUnit", "shippingMode"};
            Object[] values = {organisationalUnit, shippingMode};
            List<Tolerance> list = (List<Tolerance>) findByNamedQueryAndNamedParam("tolerance.byLevelOrderbyOrgUnit",
                    names, values);
            return list;
        } else {
            String[] names = {"shippingMode"};
            Object[] values = {shippingMode};
            List<Tolerance> list = (List<Tolerance>) findByNamedQueryAndNamedParam("tolerance.byLevel",
                    names, values);
            return list;
        }
    }

    public List<Tolerance> findAll() {
        return (List<Tolerance>) getNamedQuery("tolerance.all");
    }

}