diff --git a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/LocationDAO.java b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/LocationDAO.java index 3e55a30..a2d09a0 100644 --- a/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/LocationDAO.java +++ b/ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/LocationDAO.java @@ -2,10 +2,16 @@ package dst.ass1.jpa.dao.impl; import dst.ass1.jpa.dao.ILocationDAO; import dst.ass1.jpa.model.ILocation; +import dst.ass1.jpa.model.ITrip; import dst.ass1.jpa.model.impl.Location; import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; + +import static dst.ass1.jpa.util.Constants.Q_REACHED_LOCATIONS; public class LocationDAO extends GenericDAO implements ILocationDAO { public LocationDAO(EntityManager entityManager) { @@ -14,6 +20,20 @@ public class LocationDAO extends GenericDAO implements ILocationDAO { @Override public Collection findReachedLocationIds() { - return null; + Query query = super.entityManager.createNamedQuery(Q_REACHED_LOCATIONS); + List trips = query.getResultList(); + List reachedLocationIds = new ArrayList<>(); + for (ITrip trip : trips) { + // Add destinations + if (!reachedLocationIds.contains(trip.getDestination().getLocationId())) + reachedLocationIds.add(trip.getDestination().getLocationId()); + + // Add stops + for (ILocation location : trip.getStops()) { + if (!reachedLocationIds.contains(location.getLocationId())) + reachedLocationIds.add(location.getLocationId()); + } + } + return reachedLocationIds; } } diff --git a/ass1-jpa/src/main/java/dst/ass1/jpa/model/impl/Location.java b/ass1-jpa/src/main/java/dst/ass1/jpa/model/impl/Location.java index 84640c9..f58c440 100644 --- a/ass1-jpa/src/main/java/dst/ass1/jpa/model/impl/Location.java +++ b/ass1-jpa/src/main/java/dst/ass1/jpa/model/impl/Location.java @@ -1,13 +1,17 @@ package dst.ass1.jpa.model.impl; import dst.ass1.jpa.model.ILocation; -import dst.ass1.jpa.model.ITrip; import javax.persistence.*; -import java.util.ArrayList; -import java.util.Collection; + +import static dst.ass1.jpa.util.Constants.Q_REACHED_LOCATIONS; @Entity +@NamedQuery( + name = Q_REACHED_LOCATIONS, + query = "SELECT t FROM Trip t " + + "WHERE t.state = 6" +) public class Location implements ILocation { @Id @GeneratedValue private Long id;