DemurrageGeneralRepositoryImpl.java
package com.tradecloud.repository.demurrage;
import com.tradecloud.domain.base.utils.DateRange;
import com.tradecloud.domain.container.ContainerType;
import com.tradecloud.domain.container.ShipmentContainer;
import com.tradecloud.domain.demurrage.OverstayAndStorageFreePeriod;
import com.tradecloud.domain.demurrage.OverstayAndStorageTransaction;
import com.tradecloud.domain.demurrage.TurnInFreePeriod;
import com.tradecloud.domain.demurrage.TurnInTransaction;
import com.tradecloud.domain.infrastructure.persistence.CriteriaBuilder;
import com.tradecloud.domain.party.ServiceProvider;
import com.tradecloud.domain.place.Depot;
import com.tradecloud.domain.place.PlaceOfDischarge;
import com.tradecloud.dto.demurrage.DemurrageTransactionSearch;
import com.tradecloud.repository.impl.GeneralRepositoryImpl;
import org.hibernate.Query;
import org.hibernate.criterion.DetachedCriteria;
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;
@Repository(value = "demurrageGeneralRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class DemurrageGeneralRepositoryImpl extends GeneralRepositoryImpl implements DemurrageGeneralRepository {
private static final String EFFECTIVE_DATE = "effectiveDate";
private static final String CONTAINER_TYPE = "containerType";
private static final String PLACE_OF_DISCHARGE = "placeOfDischarge";
private static final String TURN_IN_DEPOT = "turnInDepot";
private static final String CARRIER = "carrier";
@Override
public List<OverstayAndStorageFreePeriod> searchOverstayAndStorageFreePeriod(DateRange dateRange, ContainerType containerType,
PlaceOfDischarge placeOfDischarge) {
DetachedCriteria criteria = DetachedCriteria.forClass(OverstayAndStorageFreePeriod.class);
if (dateRange != null) {
CriteriaBuilder.addDateRangeCriteria(criteria, EFFECTIVE_DATE, dateRange);
}
if (containerType != null) {
CriteriaBuilder.addEqRestriction(criteria, CONTAINER_TYPE, containerType);
}
if (placeOfDischarge != null) {
CriteriaBuilder.addEqRestriction(criteria, PLACE_OF_DISCHARGE, placeOfDischarge);
}
return getExecutableCriteriaList(criteria, OverstayAndStorageFreePeriod.class);
}
@Override
public List<TurnInFreePeriod> searchTurnInFreePeriod(DateRange dateRange, ContainerType containerType, Depot turnInDepot,
ServiceProvider carrier) {
DetachedCriteria criteria = DetachedCriteria.forClass(TurnInFreePeriod.class);
CriteriaBuilder.addDateRangeCriteria(criteria, EFFECTIVE_DATE, dateRange);
CriteriaBuilder.addEqRestriction(criteria, CONTAINER_TYPE, containerType);
CriteriaBuilder.addEqRestriction(criteria, TURN_IN_DEPOT, turnInDepot);
CriteriaBuilder.addEqRestriction(criteria, CARRIER, carrier);
return getExecutableCriteriaList(criteria, TurnInFreePeriod.class);
}
@Override
public List<OverstayAndStorageTransaction> searchOverstayAndStorageTransaction(DemurrageTransactionSearch search) {
String queryString = "from OverstayAndStorageTransaction where active = :activeStatus";
Query query = getSessionCustom().createQuery(queryString);
query.setParameter("activeStatus", true);
return (List<OverstayAndStorageTransaction>) query.list();
}
@Override
public List<TurnInTransaction> searchTurnInTransaction(DemurrageTransactionSearch search) {
String queryString = "from TurnInTransaction where active = :activeStatus";
Query query = getSessionCustom().createQuery(queryString);
query.setParameter("activeStatus", true);
return (List<TurnInTransaction>) query.list();
}
@Override
public OverstayAndStorageTransaction findOverstayAndStorageTransaction(ShipmentContainer container) {
String queryString = "from OverstayAndStorageTransaction where shipmentContainer.id = :containerId";
Query query = getSessionCustom().createQuery(queryString);
query.setParameter("containerId", container.getId());
return (OverstayAndStorageTransaction) query.uniqueResult();
}
@Override
public TurnInTransaction findTurnInTransaction(ShipmentContainer container) {
String queryString = "from TurnInTransaction where shipmentContainer.id = :containerId";
Query query = getSessionCustom().createQuery(queryString);
query.setParameter("containerId", container.getId());
return (TurnInTransaction) query.uniqueResult();
}
}