HfcOrderRepositoryImpl.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tradecloud.repository.hfc;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
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.infrastructure.persistence.CriteriaBuilder;
import com.tradecloud.domain.model.hfcmanagement.EventLabel;
import com.tradecloud.domain.model.hfcmanagement.HfcOrder;
import com.tradecloud.dto.order.HfcOrderSearch;
import com.tradecloud.domain.shipment.ShippingInformation;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;

/**
 *
 */
@Repository(value = "hfcOrderRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class HfcOrderRepositoryImpl extends RepositoryBaseImpl<HfcOrder, HfcOrderSearch> implements HfcOrderRepository {

    private static final long serialVersionUID = 1L;

    @Override
    public List<HfcOrder> search(HfcOrderSearch orderSearch) {
        DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass());

        if (orderSearch.getProductGroup() != null) {
            CriteriaBuilder.addiLikeAnyRestriction(criteria, "productGroupReference", orderSearch.getProductGroup().getReference());
        }

        if (orderSearch.getEventLabel() != null) {
            CriteriaBuilder.addEqRestriction(criteria, "eventLabel", orderSearch.getEventLabel());
        }

        if (orderSearch.getIncoterm() != null) {
            CriteriaBuilder.addEqRestriction(criteria, "incoterm", orderSearch.getIncoterm());
        }

        DetachedCriteria shippingInformationCriteria = criteria.createCriteria("shippingInformation");

        if (orderSearch.getShippingMode() != null) {
            CriteriaBuilder.addEqRestriction(shippingInformationCriteria, "shippingMode", orderSearch.getShippingMode());
        }

        if (orderSearch.getPlaceOfLoading() != null) {
            CriteriaBuilder.addEqRestriction(shippingInformationCriteria, "placeOfLoading", orderSearch.getPlaceOfLoading());
        }

        if (orderSearch.getPlaceOfDischarge() != null) {
            CriteriaBuilder.addEqRestriction(shippingInformationCriteria, "placeOfDischarge", orderSearch.getPlaceOfDischarge());
        }

        if (orderSearch.getCountryOfOrigin() != null) {
            CriteriaBuilder.addEqRestriction(shippingInformationCriteria, "countryOfOrigin", orderSearch.getCountryOfOrigin());
        }

        @SuppressWarnings("unchecked")
        List<HfcOrder> results = criteria.getExecutableCriteria(getSessionCustom()).list();
        return results;
    }

    @Override
    public HfcOrder getById(Long id) {
        HfcOrder hfcOrder = (HfcOrder) getCurrentSession().get(HfcOrder.class, id);
        return hfcOrder;
    }

    @Override
    public List<HfcOrder> getHfcOrdersByEventLabel(EventLabel eventLabel) {
        DetachedCriteria criteria = DetachedCriteria.forClass(getPersistentClass());

        if (eventLabel != null) {
            CriteriaBuilder.addEqRestriction(criteria, "eventLabel", eventLabel);
        }

        @SuppressWarnings("unchecked") List<HfcOrder> results = criteria.getExecutableCriteria(getSessionCustom()).list();
        return results;
    }

    @Override
    public ShippingInformation findShippingInformationForHfc(Long shippingInformationId) {
        Criteria criteria = getSessionCustom().createCriteria(ShippingInformation.class);
        criteria.add(Restrictions.eq("id", shippingInformationId));
        return (ShippingInformation) criteria.uniqueResult();
    }
}