TurnInRepositoryImpl.java

package com.tradecloud.repository.demurrage;

import com.tradecloud.domain.base.utils.DateRange;
import com.tradecloud.domain.demurrage.TurnInTransaction;
import com.tradecloud.dto.demurrage.TurnInTransactionSearch;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;

@Repository(value = "turnInRepository")
public class TurnInRepositoryImpl extends RepositoryBaseImpl<TurnInTransaction, TurnInTransactionSearch>
        implements TurnInRepository {

    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.turnInFreePeriodEnd";
    private static final String SIGNED_OFF_DATE = "signedOffDate";
    private static final String ACTIVE = "active";

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

    @Override
    protected Collection<CriteriaValue> mapFieldsToValues(TurnInTransactionSearch 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(CARRIER, search.getCarrier()));
  //      fields.add(CriteriaValue.eq(TURN_IN_DEPOT, search.getTurnInDepot()));
        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.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;
    }

}