diff --git a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/TripDAO.java b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/TripDAO.java index 8789bbc..b413793 100644 --- a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/TripDAO.java +++ b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/TripDAO.java @@ -2,12 +2,20 @@ package dst.ass1.jpa.dao.impl; import dst.ass1.jpa.dao.ITripDAO; import dst.ass1.jpa.model.ITrip; +import dst.ass1.jpa.model.TripState; import dst.ass1.jpa.model.impl.Trip; import javax.persistence.EntityManager; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; import java.util.Collection; import java.util.Date; +import static dst.ass1.jpa.util.Constants.M_TRIP_CREATED; +import static dst.ass1.jpa.util.Constants.M_TRIP_STATE; + public class TripDAO extends GenericDAO implements ITripDAO { public TripDAO(EntityManager entityManager) { super(entityManager, Trip.class); @@ -15,6 +23,26 @@ public class TripDAO extends GenericDAO implements ITripDAO { @Override public Collection findCancelledTrips(Date start, Date end) { - return null; + CriteriaBuilder criteriaBuilder = super.entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(ITrip.class); + + Root root = criteriaQuery.from(Trip.class); + criteriaQuery.select(root); + + Predicate cancelled = criteriaBuilder.equal(root.get(M_TRIP_STATE), TripState.CANCELLED); + Predicate startRange = criteriaBuilder.greaterThan(root.get(M_TRIP_CREATED), start); + Predicate endRange = criteriaBuilder.lessThan(root.get(M_TRIP_CREATED), end); + + if (start == null && end == null) { + criteriaQuery.where(cancelled); + } else if (start == null) { + criteriaQuery.where(criteriaBuilder.and(cancelled, endRange)); + } else if (end == null) { + criteriaQuery.where(criteriaBuilder.and(cancelled, startRange)); + } else { + criteriaQuery.where(criteriaBuilder.and(cancelled, startRange, endRange)); + } + + return super.entityManager.createQuery(criteriaQuery).getResultList(); } }