OverstayAndStorageRepositoryImpl.java

package com.tradecloud.repository.demurrage;

import com.tradecloud.domain.base.utils.DateRange;
import com.tradecloud.domain.demurrage.OverstayAndStorageTransaction;
import com.tradecloud.dto.demurrage.OverstayAndStorageTransactionSearch;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.hibernate.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.Collection;
import java.util.LinkedHashSet;
import java.util.List;

@Repository(value = "overstayAndStorageRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class OverstayAndStorageRepositoryImpl extends RepositoryBaseImpl<OverstayAndStorageTransaction, OverstayAndStorageTransactionSearch>
        implements OverstayAndStorageRepository {

    private static final String EFFECTIVE_DATE = "effectiveDate";
    private static final String CONTAINER_TYPE = "containerType";
    private static final String PLACE_OF_DISCHARGE = "shipmentContainer.placeOfDischarge";
    private static final String TURN_IN_DEPOT = "turnInDepot";
    private static final String CARRIER = "seaShipment.carrier";
    private static final String CONTAINER_REFERENCE = "shipmentContainer.reference";
    private static final String SHIPMENT_NUMBER = "shipmentContainer.shipment.number";
    private static final String SHIPMENT_REFERENCE = "shipmentContainer.shipment.reference";
    private static final String TRANSACTION_STATE = "state";
    private static final String CREATED_DATE = "created";
    private static final String FREE_PERIOD_DATE = "shipmentContainer.overstayAndStorageFreePeriodEnd";
    private static final String SIGNED_OFF_DATE = "signedOffDate";
    private static final String PORT_STORAGE_DATE_FROM = "portStorageFromDate";
    private static final String PORT_STORAGE_DATE_TO = "portStorageToDate";
    private static final String OVERSTAY_DATE_FROM = "overstayFromDate";
    private static final String OVERSTAY_DATE_TO = "overstayToDate";
    private static final String ACTIVE = "active";

    @Override
    public List<OverstayAndStorageTransaction> search(OverstayAndStorageTransactionSearch search) {
        Query query = createQuery(search, false, mapFieldsToValues(search));
        return getQueryList(query, search.getSearchMetaParams());
    }

    @Override
    protected Collection<CriteriaValue> mapFieldsToValues(OverstayAndStorageTransactionSearch search) {

        Collection<CriteriaValue> fields = new LinkedHashSet<CriteriaValue>();

        fields.add(CriteriaValue.like(CONTAINER_REFERENCE, search.getContainerReference()));
        fields.add(CriteriaValue.like(SHIPMENT_REFERENCE, search.getShipmentReference()));
        fields.add(CriteriaValue.like(SHIPMENT_NUMBER, search.getShipmentNumber()));
        fields.add(CriteriaValue.eq(TRANSACTION_STATE, search.getState()));
        fields.add(CriteriaValue.eq(PLACE_OF_DISCHARGE, search.getPlaceOfDischarge()));
        fields.add(CriteriaValue.eq(CARRIER, search.getCarrier()));
        if(search.getCreatedDateRange() != null) {
            DateRange dr = search.getCreatedDateRange();
            fields.add(CriteriaValue.gt(CREATED_DATE, dr.getFromAsStartOfDay()));
            fields.add(CriteriaValue.lt(CREATED_DATE, dr.getToAsEndOfDay()));
        }
        if(search.getFreePeriodEndDateRange() != null) {
            DateRange dr = search.getFreePeriodEndDateRange();
            fields.add(CriteriaValue.gt(FREE_PERIOD_DATE, dr.getFromAsStartOfDay()));
            fields.add(CriteriaValue.lt(FREE_PERIOD_DATE, dr.getToAsEndOfDay()));
        }
        if(search.getPortStorageDateRange() != null) {
            DateRange dr = search.getPortStorageDateRange();
            fields.add(CriteriaValue.gt(PORT_STORAGE_DATE_FROM, dr.getFromAsStartOfDay()));
            fields.add(CriteriaValue.lt(PORT_STORAGE_DATE_TO, search.getPortStorageDateRange().getTo()));
        }
        if(search.getOverstayDateRange() != null) {
            DateRange dr = search.getOverstayDateRange();
            fields.add(CriteriaValue.gt(OVERSTAY_DATE_FROM, dr.getFromAsStartOfDay()));
            fields.add(CriteriaValue.lt(OVERSTAY_DATE_TO, dr.getToAsEndOfDay()));
        }
        if(search.getSignedOffDateRange() != null) {
            DateRange dr = search.getSignedOffDateRange();
            fields.add(CriteriaValue.gt(SIGNED_OFF_DATE, dr.getFromAsStartOfDay()));
            fields.add(CriteriaValue.lt(SIGNED_OFF_DATE, dr.getToAsEndOfDay()));
        }
   //     fields.add(CriteriaValue.eq(ACTIVE, true));

        return fields;
    }

}