From 38cfec4f0dd55514a7213579d284377157c13c5d Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 5 Sep 2024 14:17:09 -0400 Subject: [PATCH 01/12] service window first commit --- .../report/model/FeedMetadata.java | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 832daea602..e353d77ed9 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -19,6 +19,7 @@ public class FeedMetadata { public static final String FEED_INFO_FEED_LANGUAGE = "Feed Language"; public static final String FEED_INFO_FEED_START_DATE = "Feed Start Date"; public static final String FEED_INFO_FEED_END_DATE = "Feed End Date"; + public static final String FEED_INFO_SERVICE_WINDOW = "Service Date Range"; /* * Use these strings as keys in the counts map. Also used to specify the info that will appear in @@ -79,7 +80,7 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) - feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get()); + feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); } feedMetadata.loadAgencyData( (GtfsTableContainer) @@ -302,7 +303,7 @@ private void loadAgencyData(GtfsTableContainer agencyTable) { } } - private void loadFeedInfo(GtfsTableContainer feedTable) { + private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { var info = feedTable.getEntities().isEmpty() ? null : feedTable.getEntities().get(0); feedInfo.put(FEED_INFO_PUBLISHER_NAME, info == null ? "N/A" : info.feedPublisherName()); @@ -321,6 +322,59 @@ private void loadFeedInfo(GtfsTableContainer feedTable) { localDate.equals(GtfsFeedInfo.DEFAULT_FEED_END_DATE) ? "N/A" : localDate.toString(); feedInfo.put(FEED_INFO_FEED_END_DATE, info == null ? "N/A" : displayDate); } + + loadServiceWindow(tripContainer, calendarTable, calendarDateTable); + } + + private void loadServiceWindow(GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { + List trips = tripContainer.getEntities(); + + LocalDate earliestStartDate = null; + LocalDate latestEndDate = null; + if (calendarDateTable.isMissingFile() && calendarTable.isParsedSuccessfully()) { + List calendars = calendarTable.getEntities(); + for (GtfsTrip trip : trips) { + String serviceId = trip.serviceId(); + for (GtfsCalendar calendar : calendars) { + if (calendar.serviceId().equals(serviceId)) { + LocalDate startDate = calendar.startDate().getLocalDate(); + LocalDate endDate = calendar.endDate().getLocalDate(); + + if (startDate != null && endDate != null) { + if (earliestStartDate == null || startDate.isBefore(earliestStartDate)) { + earliestStartDate = startDate; + } + if (latestEndDate == null || endDate.isAfter(latestEndDate)) { + latestEndDate = endDate; + } + } + } + } + } + } else if (calendarDateTable.isParsedSuccessfully() && calendarTable.isMissingFile()) { + List calendarDates = calendarDateTable.getEntities(); + for (GtfsTrip trip : trips) { + String serviceId = trip.serviceId(); + for (GtfsCalendarDate calendarDate : calendarDates) { + if (calendarDate.serviceId().equals(serviceId)) { + LocalDate date = calendarDate.date().getLocalDate(); + if (date != null) { + if (earliestStartDate == null || date.isBefore(earliestStartDate)) { + earliestStartDate = date; + } + if (latestEndDate == null || date.isAfter(latestEndDate)) { + latestEndDate = date; + } + } + } + } + } + } + StringBuilder serviceWindow = new StringBuilder(); + serviceWindow.append(earliestStartDate); + serviceWindow.append(" to "); + serviceWindow.append(latestEndDate); + feedInfo.put(FEED_INFO_SERVICE_WINDOW, serviceWindow.toString()); } private boolean hasAtLeastOneRecordInFile( From 5c8c4d8aac06db035078a0ecdfe26d084788cd1b Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 9 Sep 2024 12:53:27 -0400 Subject: [PATCH 02/12] added logic when both calendars.txt and calendar_dates.txt are used --- .../report/model/FeedMetadata.java | 60 ++++++++++++++++++- .../gtfsvalidator/util/CalendarUtil.java | 1 + 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index e353d77ed9..01a6d6c3bf 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -1,5 +1,6 @@ package org.mobilitydata.gtfsvalidator.report.model; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.vladsch.flexmark.util.misc.Pair; @@ -7,6 +8,8 @@ import java.util.*; import java.util.function.Function; import org.mobilitydata.gtfsvalidator.table.*; +import org.mobilitydata.gtfsvalidator.util.CalendarUtil; +import org.mobilitydata.gtfsvalidator.util.ServicePeriod; public class FeedMetadata { /* @@ -326,12 +329,25 @@ private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableC loadServiceWindow(tripContainer, calendarTable, calendarDateTable); } + /** + * Loads the service window by determining the earliest start date and the latest end date + * for all services referenced with a trip\_id in `trips.txt`. It handles three cases: + * 1. When only `calendars.txt` is used. + * 2. When only `calendar\_dates.txt` is used. + * 3. When both `calendars.txt` and `calendar\_dates.txt` are used. + * + * @param tripContainer the container for `trips.txt` data + * @param calendarTable the container for `calendars.txt` data + * @param calendarDateTable the container for `calendar\_dates.txt` data + */ private void loadServiceWindow(GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { List trips = tripContainer.getEntities(); LocalDate earliestStartDate = null; LocalDate latestEndDate = null; if (calendarDateTable.isMissingFile() && calendarTable.isParsedSuccessfully()) { + //When only calendars.txt is used + System.out.println("Only calendars.txt is used"); List calendars = calendarTable.getEntities(); for (GtfsTrip trip : trips) { String serviceId = trip.serviceId(); @@ -352,6 +368,8 @@ private void loadServiceWindow(GtfsTableContainer tripContainer, GtfsT } } } else if (calendarDateTable.isParsedSuccessfully() && calendarTable.isMissingFile()) { + //When only calendar_dates.txt is used + System.out.println("Only calendar_dates.txt is used"); List calendarDates = calendarDateTable.getEntities(); for (GtfsTrip trip : trips) { String serviceId = trip.serviceId(); @@ -369,11 +387,49 @@ private void loadServiceWindow(GtfsTableContainer tripContainer, GtfsT } } } + } else if (calendarTable.isParsedSuccessfully() && calendarDateTable.isParsedSuccessfully()) { + //When both calendars.txt and calendar_dates.txt are used + System.out.println("Both calendars.txt and calendar_dates.txt are used"); + Preconditions.checkNotNull(calendarTable); + Preconditions.checkNotNull(calendarDateTable); + + Map servicePeriods = + CalendarUtil.buildServicePeriodMap( + (GtfsCalendarTableContainer) calendarTable, + (GtfsCalendarDateTableContainer) calendarDateTable); + + for (GtfsTrip trip : trips) { + String serviceId = trip.serviceId(); + ServicePeriod servicePeriod = servicePeriods.get(serviceId); + if (servicePeriod != null) { + LocalDate startDate = servicePeriod.getServiceStart(); + LocalDate endDate = servicePeriod.getServiceEnd(); + + if (startDate != null && endDate != null) { + if (earliestStartDate == null || startDate.isBefore(earliestStartDate)) { + earliestStartDate = startDate; + } + if (latestEndDate == null || endDate.isAfter(latestEndDate)) { + latestEndDate = endDate; + } + } + + for (LocalDate date : servicePeriod.getRemovedDays()) { + System.out.println("Removed date: " + date); + if (date.isEqual(earliestStartDate)) { + earliestStartDate = date.plusDays(1); + } + if (date.isEqual(latestEndDate)) { + latestEndDate = date.minusDays(1); + } + } + } + } } StringBuilder serviceWindow = new StringBuilder(); - serviceWindow.append(earliestStartDate); + serviceWindow.append(earliestStartDate.toString()); serviceWindow.append(" to "); - serviceWindow.append(latestEndDate); + serviceWindow.append(latestEndDate.toString()); feedInfo.put(FEED_INFO_SERVICE_WINDOW, serviceWindow.toString()); } diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java index 96ea7c7e39..b79aa0bc61 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java @@ -77,6 +77,7 @@ public static ServicePeriod createServicePeriod( return new ServicePeriod(serviceStart, serviceEnd, weeklyPattern, addedDays, removedDays); } + /** * Builds a service id to {@code ServicePeriod} mapping using the given calendar.txt and * calendar_dates.txt tables. From 1e269a291dae2b7d9cbb26d5c505ad2955c9b995 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 9 Sep 2024 14:18:16 -0400 Subject: [PATCH 03/12] renamed method --- .../gtfsvalidator/report/model/FeedMetadata.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 01a6d6c3bf..842b626e51 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -326,11 +326,11 @@ private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableC feedInfo.put(FEED_INFO_FEED_END_DATE, info == null ? "N/A" : displayDate); } - loadServiceWindow(tripContainer, calendarTable, calendarDateTable); + loadServiceDateRange(tripContainer, calendarTable, calendarDateTable); } /** - * Loads the service window by determining the earliest start date and the latest end date + * Loads the service date range by determining the earliest start date and the latest end date * for all services referenced with a trip\_id in `trips.txt`. It handles three cases: * 1. When only `calendars.txt` is used. * 2. When only `calendar\_dates.txt` is used. @@ -340,7 +340,7 @@ private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableC * @param calendarTable the container for `calendars.txt` data * @param calendarDateTable the container for `calendar\_dates.txt` data */ - private void loadServiceWindow(GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { + private void loadServiceDateRange(GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { List trips = tripContainer.getEntities(); LocalDate earliestStartDate = null; From e1a3a26d4efe22d60f0cf0b0d833bef76cf9074c Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 9 Sep 2024 15:47:56 -0400 Subject: [PATCH 04/12] added null check for earliestStartDate and lateEndDate --- .../report/model/FeedMetadata.java | 55 ++++++++++++------- .../gtfsvalidator/util/CalendarUtil.java | 1 - 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 842b626e51..bd32ac2e70 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -83,7 +83,12 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) - feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), (GtfsTableContainer) feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); + feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); } feedMetadata.loadAgencyData( (GtfsTableContainer) @@ -306,7 +311,11 @@ private void loadAgencyData(GtfsTableContainer agencyTable) { } } - private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { + private void loadFeedInfo( + GtfsTableContainer feedTable, + GtfsTableContainer tripContainer, + GtfsTableContainer calendarTable, + GtfsTableContainer calendarDateTable) { var info = feedTable.getEntities().isEmpty() ? null : feedTable.getEntities().get(0); feedInfo.put(FEED_INFO_PUBLISHER_NAME, info == null ? "N/A" : info.feedPublisherName()); @@ -330,24 +339,25 @@ private void loadFeedInfo(GtfsTableContainer feedTable, GtfsTableC } /** - * Loads the service date range by determining the earliest start date and the latest end date - * for all services referenced with a trip\_id in `trips.txt`. It handles three cases: - * 1. When only `calendars.txt` is used. - * 2. When only `calendar\_dates.txt` is used. - * 3. When both `calendars.txt` and `calendar\_dates.txt` are used. + * Loads the service date range by determining the earliest start date and the latest end date for + * all services referenced with a trip\_id in `trips.txt`. It handles three cases: 1. When only + * `calendars.txt` is used. 2. When only `calendar\_dates.txt` is used. 3. When both + * `calendars.txt` and `calendar\_dates.txt` are used. * * @param tripContainer the container for `trips.txt` data * @param calendarTable the container for `calendars.txt` data * @param calendarDateTable the container for `calendar\_dates.txt` data */ - private void loadServiceDateRange(GtfsTableContainer tripContainer, GtfsTableContainer calendarTable, GtfsTableContainer calendarDateTable) { + private void loadServiceDateRange( + GtfsTableContainer tripContainer, + GtfsTableContainer calendarTable, + GtfsTableContainer calendarDateTable) { List trips = tripContainer.getEntities(); LocalDate earliestStartDate = null; LocalDate latestEndDate = null; if (calendarDateTable.isMissingFile() && calendarTable.isParsedSuccessfully()) { - //When only calendars.txt is used - System.out.println("Only calendars.txt is used"); + // When only calendars.txt is used List calendars = calendarTable.getEntities(); for (GtfsTrip trip : trips) { String serviceId = trip.serviceId(); @@ -356,7 +366,7 @@ private void loadServiceDateRange(GtfsTableContainer tripContainer, Gt LocalDate startDate = calendar.startDate().getLocalDate(); LocalDate endDate = calendar.endDate().getLocalDate(); - if (startDate != null && endDate != null) { + if (startDate != null || endDate != null) { if (earliestStartDate == null || startDate.isBefore(earliestStartDate)) { earliestStartDate = startDate; } @@ -368,8 +378,7 @@ private void loadServiceDateRange(GtfsTableContainer tripContainer, Gt } } } else if (calendarDateTable.isParsedSuccessfully() && calendarTable.isMissingFile()) { - //When only calendar_dates.txt is used - System.out.println("Only calendar_dates.txt is used"); + // When only calendar_dates.txt is used List calendarDates = calendarDateTable.getEntities(); for (GtfsTrip trip : trips) { String serviceId = trip.serviceId(); @@ -388,8 +397,7 @@ private void loadServiceDateRange(GtfsTableContainer tripContainer, Gt } } } else if (calendarTable.isParsedSuccessfully() && calendarDateTable.isParsedSuccessfully()) { - //When both calendars.txt and calendar_dates.txt are used - System.out.println("Both calendars.txt and calendar_dates.txt are used"); + // When both calendars.txt and calendar_dates.txt are used Preconditions.checkNotNull(calendarTable); Preconditions.checkNotNull(calendarDateTable); @@ -413,7 +421,6 @@ private void loadServiceDateRange(GtfsTableContainer tripContainer, Gt latestEndDate = endDate; } } - for (LocalDate date : servicePeriod.getRemovedDays()) { System.out.println("Removed date: " + date); if (date.isEqual(earliestStartDate)) { @@ -426,11 +433,17 @@ private void loadServiceDateRange(GtfsTableContainer tripContainer, Gt } } } - StringBuilder serviceWindow = new StringBuilder(); - serviceWindow.append(earliestStartDate.toString()); - serviceWindow.append(" to "); - serviceWindow.append(latestEndDate.toString()); - feedInfo.put(FEED_INFO_SERVICE_WINDOW, serviceWindow.toString()); + + if ((earliestStartDate == null) && (latestEndDate == null) + || earliestStartDate.isAfter(latestEndDate)) { + feedInfo.put(FEED_INFO_SERVICE_WINDOW, "N/A"); + } else { + StringBuilder serviceWindow = new StringBuilder(); + serviceWindow.append(earliestStartDate.toString()); + serviceWindow.append(" to "); + serviceWindow.append(latestEndDate.toString()); + feedInfo.put(FEED_INFO_SERVICE_WINDOW, serviceWindow.toString()); + } } private boolean hasAtLeastOneRecordInFile( diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java index b79aa0bc61..96ea7c7e39 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/util/CalendarUtil.java @@ -77,7 +77,6 @@ public static ServicePeriod createServicePeriod( return new ServicePeriod(serviceStart, serviceEnd, weeklyPattern, addedDays, removedDays); } - /** * Builds a service id to {@code ServicePeriod} mapping using the given calendar.txt and * calendar_dates.txt tables. From 9bf2721ffc0087a01afe17e9e284fef5c4fb90dc Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 9 Sep 2024 16:15:37 -0400 Subject: [PATCH 05/12] added edge case logic --- .../gtfsvalidator/report/model/FeedMetadata.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index bd32ac2e70..fce62c364c 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableSortedSet; import com.vladsch.flexmark.util.misc.Pair; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import org.mobilitydata.gtfsvalidator.table.*; @@ -433,15 +434,19 @@ private void loadServiceDateRange( } } } - + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy"); if ((earliestStartDate == null) && (latestEndDate == null) || earliestStartDate.isAfter(latestEndDate)) { feedInfo.put(FEED_INFO_SERVICE_WINDOW, "N/A"); + } else if (earliestStartDate == null && latestEndDate != null) { + feedInfo.put(FEED_INFO_SERVICE_WINDOW, latestEndDate.format(formatter)); + } else if (latestEndDate == null && earliestStartDate != null) { + feedInfo.put(FEED_INFO_SERVICE_WINDOW, earliestStartDate.format(formatter)); } else { StringBuilder serviceWindow = new StringBuilder(); - serviceWindow.append(earliestStartDate.toString()); + serviceWindow.append(earliestStartDate); serviceWindow.append(" to "); - serviceWindow.append(latestEndDate.toString()); + serviceWindow.append(latestEndDate); feedInfo.put(FEED_INFO_SERVICE_WINDOW, serviceWindow.toString()); } } From 594d5d56a52f7ae887eb943a0b4d1997df20d677 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Tue, 10 Sep 2024 13:31:19 -0400 Subject: [PATCH 06/12] added testLoadServiceDateRange and modified loadServiceDateRange logic --- .../report/model/FeedMetadata.java | 54 ++++++++-------- .../report/model/FeedMetadataTest.java | 62 +++++++++++++++++++ 2 files changed, 87 insertions(+), 29 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index fce62c364c..f610c1e1f7 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -349,15 +349,15 @@ private void loadFeedInfo( * @param calendarTable the container for `calendars.txt` data * @param calendarDateTable the container for `calendar\_dates.txt` data */ - private void loadServiceDateRange( - GtfsTableContainer tripContainer, - GtfsTableContainer calendarTable, - GtfsTableContainer calendarDateTable) { + public void loadServiceDateRange( + GtfsTableContainer tripContainer, + GtfsTableContainer calendarTable, + GtfsTableContainer calendarDateTable) { List trips = tripContainer.getEntities(); LocalDate earliestStartDate = null; LocalDate latestEndDate = null; - if (calendarDateTable.isMissingFile() && calendarTable.isParsedSuccessfully()) { + if ((calendarDateTable == null) && (calendarTable != null)) { // When only calendars.txt is used List calendars = calendarTable.getEntities(); for (GtfsTrip trip : trips) { @@ -378,7 +378,7 @@ private void loadServiceDateRange( } } } - } else if (calendarDateTable.isParsedSuccessfully() && calendarTable.isMissingFile()) { + } else if ((calendarDateTable != null) && (calendarTable == null)) { // When only calendar_dates.txt is used List calendarDates = calendarDateTable.getEntities(); for (GtfsTrip trip : trips) { @@ -397,41 +397,37 @@ private void loadServiceDateRange( } } } - } else if (calendarTable.isParsedSuccessfully() && calendarDateTable.isParsedSuccessfully()) { + } else if ((calendarTable != null) && (calendarDateTable != null)) { // When both calendars.txt and calendar_dates.txt are used - Preconditions.checkNotNull(calendarTable); - Preconditions.checkNotNull(calendarDateTable); - Map servicePeriods = CalendarUtil.buildServicePeriodMap( (GtfsCalendarTableContainer) calendarTable, (GtfsCalendarDateTableContainer) calendarDateTable); - + List removedDates = new ArrayList<>(); for (GtfsTrip trip : trips) { String serviceId = trip.serviceId(); ServicePeriod servicePeriod = servicePeriods.get(serviceId); - if (servicePeriod != null) { - LocalDate startDate = servicePeriod.getServiceStart(); - LocalDate endDate = servicePeriod.getServiceEnd(); + LocalDate startDate = servicePeriod.getServiceStart(); + LocalDate endDate = servicePeriod.getServiceEnd(); - if (startDate != null && endDate != null) { - if (earliestStartDate == null || startDate.isBefore(earliestStartDate)) { - earliestStartDate = startDate; - } - if (latestEndDate == null || endDate.isAfter(latestEndDate)) { - latestEndDate = endDate; - } + if (startDate != null && endDate != null) { + if (earliestStartDate == null || startDate.isBefore(earliestStartDate)) { + earliestStartDate = startDate; } - for (LocalDate date : servicePeriod.getRemovedDays()) { - System.out.println("Removed date: " + date); - if (date.isEqual(earliestStartDate)) { - earliestStartDate = date.plusDays(1); - } - if (date.isEqual(latestEndDate)) { - latestEndDate = date.minusDays(1); - } + if (latestEndDate == null || endDate.isAfter(latestEndDate)) { + latestEndDate = endDate; } } + removedDates.addAll(servicePeriod.getRemovedDays()); + } + + for (LocalDate date : removedDates) { + if (date.isEqual(earliestStartDate)) { + earliestStartDate = date.plusDays(1); + } + if (date.isEqual(latestEndDate)) { + latestEndDate = date.minusDays(1); + } } } DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy"); diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java index cdebe4c4f6..f0d70e91b6 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java @@ -1,6 +1,9 @@ package org.mobilitydata.gtfsvalidator.report.model; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableList; import java.io.BufferedWriter; @@ -8,6 +11,8 @@ import java.io.FileWriter; import java.io.IOException; import java.time.LocalDate; +import java.util.List; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -17,6 +22,7 @@ import org.mobilitydata.gtfsvalidator.input.GtfsInput; import org.mobilitydata.gtfsvalidator.notice.NoticeContainer; import org.mobilitydata.gtfsvalidator.table.*; +import org.mobilitydata.gtfsvalidator.type.GtfsDate; import org.mobilitydata.gtfsvalidator.validator.*; public class FeedMetadataTest { @@ -31,6 +37,13 @@ public class FeedMetadataTest { ValidatorLoader validatorLoader; File rootDir; + // Mock data for trips + NoticeContainer noticeContainer = mock(NoticeContainer.class); + private GtfsTableContainer tripContainer; + private GtfsTableContainer calendarTable; + private GtfsTableContainer calendarDateTable; + private FeedMetadata feedMetadata = new FeedMetadata(); + private void createDataFile(String filename, String content) throws IOException { File dataFile = tmpDir.newFile("data/" + filename); try (BufferedWriter writer = new BufferedWriter(new FileWriter(dataFile))) { @@ -50,6 +63,55 @@ public void setup() throws IOException, ValidatorLoaderException { ValidatorLoader.createForClasses(ClassGraphDiscovery.discoverValidatorsInDefaultPackage()); } + public static GtfsTrip createTrip( + int csvRowNumber, String serviceId) { + return new GtfsTrip.Builder() + .setCsvRowNumber(csvRowNumber) + .setServiceId(serviceId) + .build(); + } + + public static GtfsCalendar createCalendar(int csvRowNumber, String serviceId, GtfsDate startDate, GtfsDate endDate) { + return new GtfsCalendar.Builder() + .setCsvRowNumber(csvRowNumber) + .setServiceId(serviceId) + .setStartDate(startDate) + .setEndDate(endDate) + .build(); + } + + public static GtfsCalendarDate createCalendarDate(int csvRowNumber, String serviceId, GtfsDate date, GtfsCalendarDateExceptionType exceptionType) { + return new GtfsCalendarDate.Builder() + .setCsvRowNumber(csvRowNumber) + .setServiceId(serviceId) + .setDate(date) + .setExceptionType(exceptionType) + .build(); + } + + @Test + public void testLoadServiceDateRange() { + GtfsTrip trip1 = createTrip(1, "JUN24-MVS-SUB-Weekday-01"); + GtfsTrip trip2 = createTrip(2, "JUN24-MVS-SUB-Weekday-02"); + //when(tripContainer.getEntities()).thenReturn(List.of(trip1, trip2)); + tripContainer = GtfsTripTableContainer.forEntities(List.of(trip1, trip2), noticeContainer); + GtfsCalendar calendar1 = createCalendar(1, "JUN24-MVS-SUB-Weekday-01", GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 20))); + GtfsCalendar calendar2 = createCalendar(2, "JUN24-MVS-SUB-Weekday-02", GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 31))); + // when(calendarTable.getEntities()).thenReturn(List.of(calendar1, calendar2)); + calendarTable = GtfsCalendarTableContainer.forEntities(List.of(calendar1, calendar2), noticeContainer); + GtfsCalendarDate calendarDate1 = createCalendarDate(1, "JUN24-MVS-SUB-Weekday-01", GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), GtfsCalendarDateExceptionType.SERVICE_REMOVED); + GtfsCalendarDate calendarDate2 = createCalendarDate(2, "JUN24-MVS-SUB-Weekday-02", GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), GtfsCalendarDateExceptionType.SERVICE_ADDED); + //when(calendarDateTable.getEntities()).thenReturn(List.of(calendarDate1, calendarDate2)); + calendarDateTable = GtfsCalendarDateTableContainer.forEntities(List.of(calendarDate1, calendarDate2), noticeContainer); + + // Call the method + feedMetadata.loadServiceDateRange(tripContainer, calendarTable, calendarDateTable); + + // Verify the result + String expectedServiceWindow = "2024-01-02 to 2024-12-31"; + assertEquals(expectedServiceWindow, feedMetadata.feedInfo.get(FeedMetadata.FEED_INFO_SERVICE_WINDOW)); + } + private void validateSpecFeature( String specFeature, Boolean expectedValue, From a20686a9d02047562f8667e5cfefe0fb73ad2ab5 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Tue, 10 Sep 2024 14:02:34 -0400 Subject: [PATCH 07/12] formatted code --- .../report/model/FeedMetadata.java | 7 +- .../report/model/FeedMetadataTest.java | 85 ++++++++++++------- 2 files changed, 57 insertions(+), 35 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index f610c1e1f7..7804fef66d 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -1,6 +1,5 @@ package org.mobilitydata.gtfsvalidator.report.model; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.vladsch.flexmark.util.misc.Pair; @@ -350,9 +349,9 @@ private void loadFeedInfo( * @param calendarDateTable the container for `calendar\_dates.txt` data */ public void loadServiceDateRange( - GtfsTableContainer tripContainer, - GtfsTableContainer calendarTable, - GtfsTableContainer calendarDateTable) { + GtfsTableContainer tripContainer, + GtfsTableContainer calendarTable, + GtfsTableContainer calendarDateTable) { List trips = tripContainer.getEntities(); LocalDate earliestStartDate = null; diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java index f0d70e91b6..ccd9cf9db5 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java @@ -3,7 +3,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableList; import java.io.BufferedWriter; @@ -12,7 +11,6 @@ import java.io.IOException; import java.time.LocalDate; import java.util.List; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -63,53 +61,78 @@ public void setup() throws IOException, ValidatorLoaderException { ValidatorLoader.createForClasses(ClassGraphDiscovery.discoverValidatorsInDefaultPackage()); } - public static GtfsTrip createTrip( - int csvRowNumber, String serviceId) { - return new GtfsTrip.Builder() - .setCsvRowNumber(csvRowNumber) - .setServiceId(serviceId) - .build(); + public static GtfsTrip createTrip(int csvRowNumber, String serviceId) { + return new GtfsTrip.Builder().setCsvRowNumber(csvRowNumber).setServiceId(serviceId).build(); } - public static GtfsCalendar createCalendar(int csvRowNumber, String serviceId, GtfsDate startDate, GtfsDate endDate) { + public static GtfsCalendar createCalendar( + int csvRowNumber, String serviceId, GtfsDate startDate, GtfsDate endDate) { return new GtfsCalendar.Builder() - .setCsvRowNumber(csvRowNumber) - .setServiceId(serviceId) - .setStartDate(startDate) - .setEndDate(endDate) - .build(); - } - - public static GtfsCalendarDate createCalendarDate(int csvRowNumber, String serviceId, GtfsDate date, GtfsCalendarDateExceptionType exceptionType) { + .setCsvRowNumber(csvRowNumber) + .setServiceId(serviceId) + .setStartDate(startDate) + .setEndDate(endDate) + .build(); + } + + public static GtfsCalendarDate createCalendarDate( + int csvRowNumber, + String serviceId, + GtfsDate date, + GtfsCalendarDateExceptionType exceptionType) { return new GtfsCalendarDate.Builder() - .setCsvRowNumber(csvRowNumber) - .setServiceId(serviceId) - .setDate(date) - .setExceptionType(exceptionType) - .build(); + .setCsvRowNumber(csvRowNumber) + .setServiceId(serviceId) + .setDate(date) + .setExceptionType(exceptionType) + .build(); } @Test public void testLoadServiceDateRange() { GtfsTrip trip1 = createTrip(1, "JUN24-MVS-SUB-Weekday-01"); GtfsTrip trip2 = createTrip(2, "JUN24-MVS-SUB-Weekday-02"); - //when(tripContainer.getEntities()).thenReturn(List.of(trip1, trip2)); + // when(tripContainer.getEntities()).thenReturn(List.of(trip1, trip2)); tripContainer = GtfsTripTableContainer.forEntities(List.of(trip1, trip2), noticeContainer); - GtfsCalendar calendar1 = createCalendar(1, "JUN24-MVS-SUB-Weekday-01", GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 20))); - GtfsCalendar calendar2 = createCalendar(2, "JUN24-MVS-SUB-Weekday-02", GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 31))); + GtfsCalendar calendar1 = + createCalendar( + 1, + "JUN24-MVS-SUB-Weekday-01", + GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), + GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 20))); + GtfsCalendar calendar2 = + createCalendar( + 2, + "JUN24-MVS-SUB-Weekday-02", + GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), + GtfsDate.fromLocalDate(LocalDate.of(2024, 12, 31))); // when(calendarTable.getEntities()).thenReturn(List.of(calendar1, calendar2)); - calendarTable = GtfsCalendarTableContainer.forEntities(List.of(calendar1, calendar2), noticeContainer); - GtfsCalendarDate calendarDate1 = createCalendarDate(1, "JUN24-MVS-SUB-Weekday-01", GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), GtfsCalendarDateExceptionType.SERVICE_REMOVED); - GtfsCalendarDate calendarDate2 = createCalendarDate(2, "JUN24-MVS-SUB-Weekday-02", GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), GtfsCalendarDateExceptionType.SERVICE_ADDED); - //when(calendarDateTable.getEntities()).thenReturn(List.of(calendarDate1, calendarDate2)); - calendarDateTable = GtfsCalendarDateTableContainer.forEntities(List.of(calendarDate1, calendarDate2), noticeContainer); + calendarTable = + GtfsCalendarTableContainer.forEntities(List.of(calendar1, calendar2), noticeContainer); + GtfsCalendarDate calendarDate1 = + createCalendarDate( + 1, + "JUN24-MVS-SUB-Weekday-01", + GtfsDate.fromLocalDate(LocalDate.of(2024, 1, 1)), + GtfsCalendarDateExceptionType.SERVICE_REMOVED); + GtfsCalendarDate calendarDate2 = + createCalendarDate( + 2, + "JUN24-MVS-SUB-Weekday-02", + GtfsDate.fromLocalDate(LocalDate.of(2024, 6, 1)), + GtfsCalendarDateExceptionType.SERVICE_ADDED); + // when(calendarDateTable.getEntities()).thenReturn(List.of(calendarDate1, calendarDate2)); + calendarDateTable = + GtfsCalendarDateTableContainer.forEntities( + List.of(calendarDate1, calendarDate2), noticeContainer); // Call the method feedMetadata.loadServiceDateRange(tripContainer, calendarTable, calendarDateTable); // Verify the result String expectedServiceWindow = "2024-01-02 to 2024-12-31"; - assertEquals(expectedServiceWindow, feedMetadata.feedInfo.get(FeedMetadata.FEED_INFO_SERVICE_WINDOW)); + assertEquals( + expectedServiceWindow, feedMetadata.feedInfo.get(FeedMetadata.FEED_INFO_SERVICE_WINDOW)); } private void validateSpecFeature( From f962997d5ef46b78e189590fbbafc83788407297 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 12 Sep 2024 10:06:25 -0400 Subject: [PATCH 08/12] add null check before loadFeedInfo; use a field noticeContainer in FeedMetadataTest --- .../gtfsvalidator/report/model/FeedMetadata.java | 5 ++++- .../gtfsvalidator/report/model/FeedMetadataTest.java | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index b3681f4e98..3b0c1641a3 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -82,7 +82,10 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java index ccd9cf9db5..5495a26c46 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java @@ -2,7 +2,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; import com.google.common.collect.ImmutableList; import java.io.BufferedWriter; @@ -36,7 +35,8 @@ public class FeedMetadataTest { File rootDir; // Mock data for trips - NoticeContainer noticeContainer = mock(NoticeContainer.class); + NoticeContainer noticeContainer = new NoticeContainer(); + ; private GtfsTableContainer tripContainer; private GtfsTableContainer calendarTable; private GtfsTableContainer calendarDateTable; @@ -140,7 +140,6 @@ private void validateSpecFeature( Boolean expectedValue, ImmutableList>> tableDescriptors) throws IOException, InterruptedException { - NoticeContainer noticeContainer = new NoticeContainer(); feedLoaderMock = new GtfsFeedLoader(tableDescriptors); try (GtfsInput gtfsInput = GtfsInput.createFromPath(rootDir.toPath(), noticeContainer)) { GtfsFeedContainer feedContainer = From 654744726c4950d247ac985719beafdc1d7f5374 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 12 Sep 2024 16:51:04 -0400 Subject: [PATCH 09/12] revert back changes --- .../report/model/FeedMetadata.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 3b0c1641a3..514227521a 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -82,19 +82,15 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) - feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), - (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); - } + feedMetadata.loadFeedInfo( + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); + feedMetadata.loadAgencyData( (GtfsTableContainer) feedContainer.getTableForFilename(GtfsAgency.FILENAME).get()); From 55489e7f9d2bd49ced91a8d418aa744164bb171e Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 12 Sep 2024 17:13:12 -0400 Subject: [PATCH 10/12] called loadServiceDateRange separately from loadFeedInfo --- .../gtfsvalidator/report/model/FeedMetadata.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 514227521a..bc6bc095c1 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -94,6 +94,13 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) feedContainer.getTableForFilename(GtfsAgency.FILENAME).get()); + + feedMetadata.loadServiceDateRange( + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); feedMetadata.loadSpecFeatures(feedContainer); return feedMetadata; } @@ -389,8 +396,6 @@ private void loadFeedInfo( localDate.equals(GtfsFeedInfo.DEFAULT_FEED_END_DATE) ? "N/A" : localDate.toString(); feedInfo.put(FEED_INFO_FEED_END_DATE, info == null ? "N/A" : displayDate); } - - loadServiceDateRange(tripContainer, calendarTable, calendarDateTable); } /** From 50287f2b1e1614b053162b4bff7550be5104df54 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 12 Sep 2024 17:17:28 -0400 Subject: [PATCH 11/12] checked in feedInfo before calling loadFeedInfo --- .../report/model/FeedMetadata.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index bc6bc095c1..06fd05e7ec 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -82,15 +82,17 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) - feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), - (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); - + if (feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).isPresent()) { + feedMetadata.loadFeedInfo( + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); + } + feedMetadata.loadAgencyData( (GtfsTableContainer) feedContainer.getTableForFilename(GtfsAgency.FILENAME).get()); From 5de42bb1759d2fa58e5ff48ec197ba6fe6b0aed9 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 16 Sep 2024 10:34:46 -0400 Subject: [PATCH 12/12] resolved PR comments --- .../report/model/FeedMetadata.java | 26 +++++++++---------- .../report/model/FeedMetadataTest.java | 4 +-- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java index 06fd05e7ec..911c622516 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadata.java @@ -84,25 +84,25 @@ public static FeedMetadata from(GtfsFeedContainer feedContainer, ImmutableSet) - feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), - (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsFeedInfo.FILENAME).get(), + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); } - + feedMetadata.loadAgencyData( (GtfsTableContainer) feedContainer.getTableForFilename(GtfsAgency.FILENAME).get()); feedMetadata.loadServiceDateRange( - (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), - (GtfsTableContainer) - feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); + (GtfsTableContainer) feedContainer.getTableForFilename(GtfsTrip.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendar.FILENAME).get(), + (GtfsTableContainer) + feedContainer.getTableForFilename(GtfsCalendarDate.FILENAME).get()); feedMetadata.loadSpecFeatures(feedContainer); return feedMetadata; } diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java index 5495a26c46..72f384da66 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/report/model/FeedMetadataTest.java @@ -33,10 +33,8 @@ public class FeedMetadataTest { .build(); ValidatorLoader validatorLoader; File rootDir; - - // Mock data for trips NoticeContainer noticeContainer = new NoticeContainer(); - ; + private GtfsTableContainer tripContainer; private GtfsTableContainer calendarTable; private GtfsTableContainer calendarDateTable;