From 9706ed9a335ddb9a971c252d4cd7cc1c479685be Mon Sep 17 00:00:00 2001 From: epp26 Date: Mon, 9 Mar 2020 03:33:19 -0400 Subject: [PATCH] Added Date filter and display to search Added a date to the display and filter the results to only display Itineraries by date. --- .../TrainDemo/trips/models/Itinerary.java | 13 ++- .../trips/models/TripSearchRequest.java | 13 ++- .../trips/models/entities/CalendarEntity.java | 85 +++++++++++++++++++ .../trips/models/entities/TripEntity.java | 38 ++++++++- .../TrainDemo/trips/services/TripService.java | 23 ++--- .../templates/trips/search_trip.html | 23 +++++ .../templates/trips/search_trip_result.html | 6 +- 7 files changed, 183 insertions(+), 18 deletions(-) create mode 100644 src/main/java/edu/drexel/TrainDemo/trips/models/entities/CalendarEntity.java diff --git a/src/main/java/edu/drexel/TrainDemo/trips/models/Itinerary.java b/src/main/java/edu/drexel/TrainDemo/trips/models/Itinerary.java index f9a906c..e49f8bf 100644 --- a/src/main/java/edu/drexel/TrainDemo/trips/models/Itinerary.java +++ b/src/main/java/edu/drexel/TrainDemo/trips/models/Itinerary.java @@ -11,13 +11,20 @@ public class Itinerary { private StationEntity to; private Time departure; private Time arrival; - - public Itinerary(TripEntity trip, StationEntity from, StationEntity to, Time departure, Time arrival) { + private String departureDate; + + public Itinerary(TripEntity trip, + StationEntity from, + StationEntity to, + Time departure, + Time arrival, + String departureDate) { this.trip = trip; this.from = from; this.to = to; this.departure = departure; this.arrival = arrival; + this.departureDate = departureDate; } public TripEntity getTrip() { @@ -39,4 +46,6 @@ public Time getDeparture() { public Time getArrival() { return arrival; } + + public String getDepartureDate() { return departureDate;} } diff --git a/src/main/java/edu/drexel/TrainDemo/trips/models/TripSearchRequest.java b/src/main/java/edu/drexel/TrainDemo/trips/models/TripSearchRequest.java index 1a71846..0bfd40b 100644 --- a/src/main/java/edu/drexel/TrainDemo/trips/models/TripSearchRequest.java +++ b/src/main/java/edu/drexel/TrainDemo/trips/models/TripSearchRequest.java @@ -3,17 +3,18 @@ public class TripSearchRequest { private String from; private String to; + private String date; public TripSearchRequest() { } - public TripSearchRequest(String from, String to) { + public TripSearchRequest(String from, String to, String date) { this.from = from; this.to = to; + this.date = date; } - public String getFrom() { return from; } @@ -29,5 +30,13 @@ public String getTo() { public void setTo(String to) { this.to = to; } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } } diff --git a/src/main/java/edu/drexel/TrainDemo/trips/models/entities/CalendarEntity.java b/src/main/java/edu/drexel/TrainDemo/trips/models/entities/CalendarEntity.java new file mode 100644 index 0000000..0d9eee7 --- /dev/null +++ b/src/main/java/edu/drexel/TrainDemo/trips/models/entities/CalendarEntity.java @@ -0,0 +1,85 @@ +package edu.drexel.TrainDemo.trips.models.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity(name = "calendar") +public class CalendarEntity { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private boolean monday; + private boolean tuesday; + private boolean wednesday; + private boolean thursday; + private boolean friday; + private boolean saturday; + private boolean sunday; +// private Date startDate; +// private Date endDate; + + protected CalendarEntity() { + } + + public CalendarEntity(boolean monday, + boolean tuesday, + boolean wednesday, + boolean thursday, + boolean friday, + boolean saturday, + boolean sunday) { + this.monday = monday; + this.tuesday = tuesday; + this.wednesday = wednesday; + this.thursday = thursday; + this.friday = friday; + this.saturday = saturday; + this.sunday = sunday; + } + + + public boolean isMonday() { + return monday; + } + + public boolean isTuesday() { + return tuesday; + } + + public boolean isWednesday() { + return wednesday; + } + + public boolean isThursday() { + return thursday; + } + + public boolean isFriday() { + return friday; + } + + public boolean isSaturday() { + return saturday; + } + + public boolean isSunday() { + return sunday; + } + + @Override + public String toString() { + return "Calendar{" + + "id=" + id + + ", monday=" + monday + + ", tuesday=" + tuesday + + ", wednesday=" + wednesday + + ", thursday=" + thursday + + ", friday=" + friday + + ", saturday=" + saturday + + ", sunday=" + sunday + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/edu/drexel/TrainDemo/trips/models/entities/TripEntity.java b/src/main/java/edu/drexel/TrainDemo/trips/models/entities/TripEntity.java index b41a6b5..450444e 100644 --- a/src/main/java/edu/drexel/TrainDemo/trips/models/entities/TripEntity.java +++ b/src/main/java/edu/drexel/TrainDemo/trips/models/entities/TripEntity.java @@ -1,6 +1,9 @@ package edu.drexel.TrainDemo.trips.models.entities; import javax.persistence.*; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; @Entity(name = "trip") @@ -9,10 +12,13 @@ public class TripEntity { @Id private long id; private long routeId; - private long calendarId; private String headsign; private boolean direction; + @OneToOne(fetch= FetchType.LAZY) + @JoinColumn(name = "calendar_id") + private CalendarEntity calendarEntity; + @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "trip_id") private List stops; @@ -33,4 +39,32 @@ public StopTimeEntity getStopByStationId(String stopId) { } return null; } -} \ No newline at end of file + + + public boolean isTripOnDate(String date) + { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); + LocalDate localDate = LocalDate.parse(date, formatter); + DayOfWeek dayOfWeek = localDate.getDayOfWeek(); + + switch (dayOfWeek) + { + case SUNDAY: + return calendarEntity.isSunday(); + case MONDAY: + return calendarEntity.isMonday(); + case TUESDAY: + return calendarEntity.isTuesday(); + case WEDNESDAY: + return calendarEntity.isWednesday(); + case THURSDAY: + return calendarEntity.isThursday(); + case FRIDAY: + return calendarEntity.isFriday(); + case SATURDAY: + return calendarEntity.isSaturday(); + default: + return false; + } + } +} diff --git a/src/main/java/edu/drexel/TrainDemo/trips/services/TripService.java b/src/main/java/edu/drexel/TrainDemo/trips/services/TripService.java index 3d24134..210f74f 100644 --- a/src/main/java/edu/drexel/TrainDemo/trips/services/TripService.java +++ b/src/main/java/edu/drexel/TrainDemo/trips/services/TripService.java @@ -26,6 +26,7 @@ public TripService(StationRepository stationRepository, TripRepository tripRepos public List getMatchingTrips(TripSearchRequest searchRequest) { String toId = searchRequest.getTo(); String fromId = searchRequest.getFrom(); + String date = searchRequest.getDate(); StationEntity toStation = safeGetStationFromId(toId); StationEntity fromStation = safeGetStationFromId(fromId); @@ -50,16 +51,18 @@ public List getMatchingTrips(TripSearchRequest searchRequest) { StopTimeEntity fromStopTimeEntity = trip.getStopByStationId(fromId); StopTimeEntity toStopTimeEntity = trip.getStopByStationId(toId); - resultList.add( - new Itinerary( - trip, - fromStation, - toStation, - fromStopTimeEntity.getDepartureTime(), - toStopTimeEntity.getArrivalTime() - ) - ); - + if (trip.isTripOnDate(date)) { + resultList.add( + new Itinerary( + trip, + fromStation, + toStation, + fromStopTimeEntity.getDepartureTime(), + toStopTimeEntity.getArrivalTime(), + date + ) + ); + } } return resultList; diff --git a/src/main/resources/templates/trips/search_trip.html b/src/main/resources/templates/trips/search_trip.html index fd52e81..0aa8fe9 100644 --- a/src/main/resources/templates/trips/search_trip.html +++ b/src/main/resources/templates/trips/search_trip.html @@ -1,10 +1,33 @@ + + + + + + +

Search Trips

+ + + +
+ +