From d173b6ffb1c5cf69ad9562cf8a49620052c2353a Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Thu, 9 Jan 2025 15:38:22 -0500 Subject: [PATCH 01/14] added RouteContinousPickupDropOffValidator --- ...RouteContinuousPickupDropOffValidator.java | 86 +++++++++++++++++++ ...eContinuousPickupDropOffValidatorTest.java | 20 +++++ 2 files changed, 106 insertions(+) create mode 100644 main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java create mode 100644 main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java new file mode 100644 index 0000000000..276e8bbcee --- /dev/null +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java @@ -0,0 +1,86 @@ +package org.mobilitydata.gtfsvalidator.validator; + +import org.mobilitydata.gtfsvalidator.annotation.GtfsValidationNotice; +import org.mobilitydata.gtfsvalidator.annotation.GtfsValidator; +import org.mobilitydata.gtfsvalidator.notice.NoticeContainer; +import org.mobilitydata.gtfsvalidator.notice.ValidationNotice; +import org.mobilitydata.gtfsvalidator.table.*; +import org.mobilitydata.gtfsvalidator.type.GtfsTime; + +import javax.inject.Inject; + +import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.ERROR; + +/** + * Validates that if `routes.continuous_pickup` or `routes.continuous_drop_off` are included, + * then `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` + * are not defined for any trip of this route. + * + *

Generated notice: {@link RouteContinuousPickupDropOffNotice}. + */ +@GtfsValidator +public class RouteContinuousPickupDropOffValidator extends FileValidator{ + private final GtfsRouteTableContainer routeTable; + private final GtfsTripTableContainer tripTable; + private final GtfsStopTimeTableContainer stopTimeTable; + + @Inject + public RouteContinuousPickupDropOffValidator(GtfsRouteTableContainer routeTable, GtfsTripTableContainer tripTable, GtfsStopTimeTableContainer stopTimeTable) { + this.routeTable = routeTable; + this.tripTable = tripTable; + this.stopTimeTable = stopTimeTable; + } + + @Override + public void validate(NoticeContainer noticeContainer) { + for (GtfsRoute route : routeTable.getEntities()) { + boolean continuous = route.hasContinuousPickup() || route.hasContinuousDropOff(); + if (!continuous) { + continue; + } + for (GtfsTrip trip : tripTable.byRouteId(route.routeId())) { + for (GtfsStopTime stopTime : stopTimeTable.byTripId(trip.tripId())) { + if (stopTime.hasStartPickupDropOffWindow() || stopTime.hasEndPickupDropOffWindow()) { + noticeContainer.addValidationNotice( + new RouteContinuousPickupDropOffNotice( + route.csvRowNumber(), + trip.tripId(), + stopTime.startPickupDropOffWindow(), + stopTime.endPickupDropOffWindow())); + } + } + } + } + } + +/** + * Notice generated when `routes.continuous_pickup` or `routes.continuous_drop_off` are included + * and `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` + * are defined for any trip of this route. + */ +@GtfsValidationNotice(severity = ERROR) +public static class RouteContinuousPickupDropOffNotice extends ValidationNotice { + // The row number of the route in the CSV file. + private final int routeCsvRowNumber; + + // The ID of the trip. + private final String tripId; + + // The start time of the pickup/drop-off window. + private final GtfsTime startPickupDropOffWindow; + + // The end time of the pickup/drop-off window. + private final GtfsTime endPickupDropOffWindow; + + public RouteContinuousPickupDropOffNotice( + int routeCsvRowNumber, + String tripId, + GtfsTime startPickupDropOffWindow, + GtfsTime endPickupDropOffWindow) { + this.routeCsvRowNumber = routeCsvRowNumber; + this.tripId = tripId; + this.startPickupDropOffWindow = startPickupDropOffWindow; + this.endPickupDropOffWindow = endPickupDropOffWindow; + } + } +} \ No newline at end of file diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java new file mode 100644 index 0000000000..50305ef618 --- /dev/null +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java @@ -0,0 +1,20 @@ +package org.mobilitydata.gtfsvalidator.validator; + +import static com.google.common.truth.Truth.assertThat; + +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mobilitydata.gtfsvalidator.notice.NoticeContainer; +import org.mobilitydata.gtfsvalidator.notice.ValidationNotice; +import org.mobilitydata.gtfsvalidator.table.GtfsRoute; +import org.mobilitydata.gtfsvalidator.table.GtfsRouteTableContainer; +import org.mobilitydata.gtfsvalidator.table.GtfsStopTime; +import org.mobilitydata.gtfsvalidator.table.GtfsStopTimeTableContainer; +import org.mobilitydata.gtfsvalidator.type.GtfsTime; + +@RunWith(JUnit4.class) +public class RouteContinuousPickupDropOffValidatorTest { + +} From cf32aaeb733a42ec7104f7c0d755aa91ae77c994 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 13 Jan 2025 13:57:20 -0500 Subject: [PATCH 02/14] changed validation logic as per request --- ...RouteContinuousPickupDropOffValidator.java | 76 +++++++----- .../validator/NoticeFieldsTest.java | 2 + ...eContinuousPickupDropOffValidatorTest.java | 116 +++++++++++++++++- 3 files changed, 159 insertions(+), 35 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java index 276e8bbcee..483eddefc7 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java @@ -1,5 +1,8 @@ package org.mobilitydata.gtfsvalidator.validator; +import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.ERROR; + +import javax.inject.Inject; import org.mobilitydata.gtfsvalidator.annotation.GtfsValidationNotice; import org.mobilitydata.gtfsvalidator.annotation.GtfsValidator; import org.mobilitydata.gtfsvalidator.notice.NoticeContainer; @@ -7,25 +10,24 @@ import org.mobilitydata.gtfsvalidator.table.*; import org.mobilitydata.gtfsvalidator.type.GtfsTime; -import javax.inject.Inject; - -import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.ERROR; - /** - * Validates that if `routes.continuous_pickup` or `routes.continuous_drop_off` are included, - * then `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` - * are not defined for any trip of this route. + * Validates that if `routes.continuous_pickup` or `routes.continuous_drop_off` are included, then + * `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are not + * defined for any trip of this route. * *

Generated notice: {@link RouteContinuousPickupDropOffNotice}. */ @GtfsValidator -public class RouteContinuousPickupDropOffValidator extends FileValidator{ +public class RouteContinuousPickupDropOffValidator extends FileValidator { private final GtfsRouteTableContainer routeTable; private final GtfsTripTableContainer tripTable; private final GtfsStopTimeTableContainer stopTimeTable; @Inject - public RouteContinuousPickupDropOffValidator(GtfsRouteTableContainer routeTable, GtfsTripTableContainer tripTable, GtfsStopTimeTableContainer stopTimeTable) { + public RouteContinuousPickupDropOffValidator( + GtfsRouteTableContainer routeTable, + GtfsTripTableContainer tripTable, + GtfsStopTimeTableContainer stopTimeTable) { this.routeTable = routeTable; this.tripTable = tripTable; this.stopTimeTable = stopTimeTable; @@ -34,7 +36,11 @@ public RouteContinuousPickupDropOffValidator(GtfsRouteTableContainer routeTable, @Override public void validate(NoticeContainer noticeContainer) { for (GtfsRoute route : routeTable.getEntities()) { - boolean continuous = route.hasContinuousPickup() || route.hasContinuousDropOff(); + boolean continuous = + (route.hasContinuousPickup() + || route.continuousPickup() != GtfsContinuousPickupDropOff.NOT_AVAILABLE) + || (route.hasContinuousDropOff() + || route.continuousDropOff() != GtfsContinuousPickupDropOff.NOT_AVAILABLE); if (!continuous) { continue; } @@ -53,34 +59,42 @@ public void validate(NoticeContainer noticeContainer) { } } -/** - * Notice generated when `routes.continuous_pickup` or `routes.continuous_drop_off` are included - * and `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` - * are defined for any trip of this route. - */ -@GtfsValidationNotice(severity = ERROR) -public static class RouteContinuousPickupDropOffNotice extends ValidationNotice { - // The row number of the route in the CSV file. - private final int routeCsvRowNumber; + @Override + public boolean shouldCallValidate() { + return routeTable.hasColumn(GtfsRoute.CONTINUOUS_PICKUP_FIELD_NAME) + || routeTable.hasColumn(GtfsRoute.CONTINUOUS_DROP_OFF_FIELD_NAME) + && (stopTimeTable.hasColumn(GtfsStopTime.START_PICKUP_DROP_OFF_WINDOW_FIELD_NAME) + || stopTimeTable.hasColumn(GtfsStopTime.END_PICKUP_DROP_OFF_WINDOW_FIELD_NAME)); + } + + /** + * Notice generated when `routes.continuous_pickup` or `routes.continuous_drop_off` are included + * and `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are + * defined for any trip of this route. + */ + @GtfsValidationNotice(severity = ERROR) + public static class RouteContinuousPickupDropOffNotice extends ValidationNotice { + /** The row number of the route in the CSV file. */ + private final int routeCsvRowNumber; - // The ID of the trip. - private final String tripId; + /** The ID of the trip. */ + private final String tripId; - // The start time of the pickup/drop-off window. - private final GtfsTime startPickupDropOffWindow; + /** The start time of the pickup/drop-off window. */ + private final GtfsTime startPickupDropOffWindow; - // The end time of the pickup/drop-off window. - private final GtfsTime endPickupDropOffWindow; + /** The end time of the pickup/drop-off window. */ + private final GtfsTime endPickupDropOffWindow; - public RouteContinuousPickupDropOffNotice( - int routeCsvRowNumber, - String tripId, - GtfsTime startPickupDropOffWindow, - GtfsTime endPickupDropOffWindow) { + public RouteContinuousPickupDropOffNotice( + int routeCsvRowNumber, + String tripId, + GtfsTime startPickupDropOffWindow, + GtfsTime endPickupDropOffWindow) { this.routeCsvRowNumber = routeCsvRowNumber; this.tripId = tripId; this.startPickupDropOffWindow = startPickupDropOffWindow; this.endPickupDropOffWindow = endPickupDropOffWindow; } } -} \ No newline at end of file +} diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/NoticeFieldsTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/NoticeFieldsTest.java index 6a1a55ae91..0507ec5147 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/NoticeFieldsTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/NoticeFieldsTest.java @@ -80,6 +80,7 @@ public void testNoticeClassFieldNames() { "departureTime1", "distanceKm", "endFieldName", + "endPickupDropOffWindow", "endValue", "entityCount", "entityId", @@ -182,6 +183,7 @@ public void testNoticeClassFieldNames() { "specifiedField", "speedKph", "startFieldName", + "startPickupDropOffWindow", "startValue", "stopCsvRowNumber", "stopDesc", diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java index 50305ef618..63a2a57213 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java @@ -8,13 +8,121 @@ import org.junit.runners.JUnit4; import org.mobilitydata.gtfsvalidator.notice.NoticeContainer; import org.mobilitydata.gtfsvalidator.notice.ValidationNotice; -import org.mobilitydata.gtfsvalidator.table.GtfsRoute; -import org.mobilitydata.gtfsvalidator.table.GtfsRouteTableContainer; -import org.mobilitydata.gtfsvalidator.table.GtfsStopTime; -import org.mobilitydata.gtfsvalidator.table.GtfsStopTimeTableContainer; +import org.mobilitydata.gtfsvalidator.table.*; import org.mobilitydata.gtfsvalidator.type.GtfsTime; @RunWith(JUnit4.class) public class RouteContinuousPickupDropOffValidatorTest { + private static List generateNotices( + List routes, List trips, List stopTimes) { + NoticeContainer noticeContainer = new NoticeContainer(); + GtfsRouteTableContainer routeTable = + GtfsRouteTableContainer.forEntities(routes, noticeContainer); + GtfsTripTableContainer tripTable = GtfsTripTableContainer.forEntities(trips, noticeContainer); + GtfsStopTimeTableContainer stopTimeTable = + GtfsStopTimeTableContainer.forEntities(stopTimes, noticeContainer); + new RouteContinuousPickupDropOffValidator(routeTable, tripTable, stopTimeTable) + .validate(noticeContainer); + return noticeContainer.getValidationNotices(); + } + + @Test + public void continuousPickupWithPickupDropOffWindowShouldGenerateNotice() { + List notices = + generateNotices( + List.of( + new GtfsRoute.Builder() + .setCsvRowNumber(1) + .setRouteId("route1") + .setContinuousPickup(1) + .build()), + List.of( + new GtfsTrip.Builder() + .setCsvRowNumber(2) + .setTripId("trip1") + .setRouteId("route1") + .build()), + List.of( + new GtfsStopTime.Builder() + .setCsvRowNumber(3) + .setTripId("trip1") + .setStartPickupDropOffWindow(GtfsTime.fromString("08:00:00")) + .setEndPickupDropOffWindow(GtfsTime.fromString("09:00:00")) + .build())); + assertThat(notices) + .containsExactly( + new RouteContinuousPickupDropOffValidator.RouteContinuousPickupDropOffNotice( + 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); + } + + @Test + public void continuousDropOffWithPickupDropOffWindowShouldGenerateNotice() { + List notices = + generateNotices( + List.of( + new GtfsRoute.Builder() + .setCsvRowNumber(1) + .setRouteId("route1") + .setContinuousDropOff(1) + .build()), + List.of( + new GtfsTrip.Builder() + .setCsvRowNumber(2) + .setTripId("trip1") + .setRouteId("route1") + .build()), + List.of( + new GtfsStopTime.Builder() + .setCsvRowNumber(3) + .setTripId("trip1") + .setStartPickupDropOffWindow(GtfsTime.fromString("08:00:00")) + .setEndPickupDropOffWindow(GtfsTime.fromString("09:00:00")) + .build())); + assertThat(notices) + .containsExactly( + new RouteContinuousPickupDropOffValidator.RouteContinuousPickupDropOffNotice( + 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); + } + + @Test + public void noContinuousPickupOrDropOffShouldNotGenerateNotice() { + List notices = + generateNotices( + List.of(new GtfsRoute.Builder().setCsvRowNumber(1).setRouteId("route1").build()), + List.of( + new GtfsTrip.Builder() + .setCsvRowNumber(2) + .setTripId("trip1") + .setRouteId("route1") + .build()), + List.of( + new GtfsStopTime.Builder() + .setCsvRowNumber(3) + .setTripId("trip1") + .setStartPickupDropOffWindow(GtfsTime.fromString("08:00:00")) + .build())); + assertThat(notices).isEmpty(); + } + + @Test + public void continuousPickupAndDropOffWithoutPickupDropOffWindowShouldNotGenerateNotice() { + List notices = + generateNotices( + List.of( + new GtfsRoute.Builder() + .setCsvRowNumber(1) + .setRouteId("route1") + .setContinuousPickup(1) + .setContinuousDropOff(1) + .build()), + List.of( + new GtfsTrip.Builder() + .setCsvRowNumber(2) + .setTripId("trip1") + .setRouteId("route1") + .build()), + List.of(new GtfsStopTime.Builder().setCsvRowNumber(3).setTripId("trip1").build())); + assertThat(notices).isEmpty(); + } } From 8aef7ade9ed158defbf0143079a36f7ab1a75489 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 13 Jan 2025 14:33:52 -0500 Subject: [PATCH 03/14] fixed broken tests --- .../validator/RouteContinuousPickupDropOffValidator.java | 8 -------- .../RouteContinuousPickupDropOffValidatorTest.java | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java index 483eddefc7..e77bd0073e 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java @@ -59,14 +59,6 @@ public void validate(NoticeContainer noticeContainer) { } } - @Override - public boolean shouldCallValidate() { - return routeTable.hasColumn(GtfsRoute.CONTINUOUS_PICKUP_FIELD_NAME) - || routeTable.hasColumn(GtfsRoute.CONTINUOUS_DROP_OFF_FIELD_NAME) - && (stopTimeTable.hasColumn(GtfsStopTime.START_PICKUP_DROP_OFF_WINDOW_FIELD_NAME) - || stopTimeTable.hasColumn(GtfsStopTime.END_PICKUP_DROP_OFF_WINDOW_FIELD_NAME)); - } - /** * Notice generated when `routes.continuous_pickup` or `routes.continuous_drop_off` are included * and `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java index 63a2a57213..b3e84668b1 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java @@ -64,7 +64,7 @@ public void continuousDropOffWithPickupDropOffWindowShouldGenerateNotice() { new GtfsRoute.Builder() .setCsvRowNumber(1) .setRouteId("route1") - .setContinuousDropOff(1) + .setContinuousDropOff(2) .build()), List.of( new GtfsTrip.Builder() From 49733ac23012a76fa8dfa75f8870acd58ffcaf02 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 13 Jan 2025 16:16:48 -0500 Subject: [PATCH 04/14] renamed validator and notice --- ...a => ContinuousPickupDropOffValidator.java} | 18 +++++++++--------- ...teContinuousPickupDropOffValidatorTest.java | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) rename main/src/main/java/org/mobilitydata/gtfsvalidator/validator/{RouteContinuousPickupDropOffValidator.java => ContinuousPickupDropOffValidator.java} (82%) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java similarity index 82% rename from main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java rename to main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index e77bd0073e..0710a811cb 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -15,16 +15,16 @@ * `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are not * defined for any trip of this route. * - *

Generated notice: {@link RouteContinuousPickupDropOffNotice}. + *

Generated notice: {@link ContinuousPickupDropOffNotice}. */ @GtfsValidator -public class RouteContinuousPickupDropOffValidator extends FileValidator { +public class ContinuousPickupDropOffValidator extends FileValidator { private final GtfsRouteTableContainer routeTable; private final GtfsTripTableContainer tripTable; private final GtfsStopTimeTableContainer stopTimeTable; @Inject - public RouteContinuousPickupDropOffValidator( + public ContinuousPickupDropOffValidator( GtfsRouteTableContainer routeTable, GtfsTripTableContainer tripTable, GtfsStopTimeTableContainer stopTimeTable) { @@ -48,7 +48,7 @@ public void validate(NoticeContainer noticeContainer) { for (GtfsStopTime stopTime : stopTimeTable.byTripId(trip.tripId())) { if (stopTime.hasStartPickupDropOffWindow() || stopTime.hasEndPickupDropOffWindow()) { noticeContainer.addValidationNotice( - new RouteContinuousPickupDropOffNotice( + new ContinuousPickupDropOffNotice( route.csvRowNumber(), trip.tripId(), stopTime.startPickupDropOffWindow(), @@ -60,12 +60,12 @@ public void validate(NoticeContainer noticeContainer) { } /** - * Notice generated when `routes.continuous_pickup` or `routes.continuous_drop_off` are included - * and `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are - * defined for any trip of this route. + * Continuous pickup or drop-off are forbidden when routes.continuous_pickup or + * routes.continuous_drop_off are 2 or 3 and stop_times.start_pickup_drop_off_window or + * stop_times.end_pickup_drop_off_window are defined for any trip of this route. */ @GtfsValidationNotice(severity = ERROR) - public static class RouteContinuousPickupDropOffNotice extends ValidationNotice { + public static class ContinuousPickupDropOffNotice extends ValidationNotice { /** The row number of the route in the CSV file. */ private final int routeCsvRowNumber; @@ -78,7 +78,7 @@ public static class RouteContinuousPickupDropOffNotice extends ValidationNotice /** The end time of the pickup/drop-off window. */ private final GtfsTime endPickupDropOffWindow; - public RouteContinuousPickupDropOffNotice( + public ContinuousPickupDropOffNotice( int routeCsvRowNumber, String tripId, GtfsTime startPickupDropOffWindow, diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java index b3e84668b1..5f9ed3ce80 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java @@ -22,7 +22,7 @@ private static List generateNotices( GtfsTripTableContainer tripTable = GtfsTripTableContainer.forEntities(trips, noticeContainer); GtfsStopTimeTableContainer stopTimeTable = GtfsStopTimeTableContainer.forEntities(stopTimes, noticeContainer); - new RouteContinuousPickupDropOffValidator(routeTable, tripTable, stopTimeTable) + new ContinuousPickupDropOffValidator(routeTable, tripTable, stopTimeTable) .validate(noticeContainer); return noticeContainer.getValidationNotices(); } @@ -52,7 +52,7 @@ public void continuousPickupWithPickupDropOffWindowShouldGenerateNotice() { .build())); assertThat(notices) .containsExactly( - new RouteContinuousPickupDropOffValidator.RouteContinuousPickupDropOffNotice( + new ContinuousPickupDropOffValidator.ContinuousPickupDropOffNotice( 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); } @@ -81,7 +81,7 @@ public void continuousDropOffWithPickupDropOffWindowShouldGenerateNotice() { .build())); assertThat(notices) .containsExactly( - new RouteContinuousPickupDropOffValidator.RouteContinuousPickupDropOffNotice( + new ContinuousPickupDropOffValidator.ContinuousPickupDropOffNotice( 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); } From e6323d189e7f146a83f66a3bee9c92d4be6633bc Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Mon, 13 Jan 2025 16:26:13 -0500 Subject: [PATCH 05/14] renamed test class --- ...datorTest.java => ContinuousPickupDropOffValidatorTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename main/src/test/java/org/mobilitydata/gtfsvalidator/validator/{RouteContinuousPickupDropOffValidatorTest.java => ContinuousPickupDropOffValidatorTest.java} (98%) diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java similarity index 98% rename from main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java rename to main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java index 5f9ed3ce80..c333dbe33a 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/RouteContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java @@ -12,7 +12,7 @@ import org.mobilitydata.gtfsvalidator.type.GtfsTime; @RunWith(JUnit4.class) -public class RouteContinuousPickupDropOffValidatorTest { +public class ContinuousPickupDropOffValidatorTest { private static List generateNotices( List routes, List trips, List stopTimes) { From 639d81fee661a275912128869d6c2b7b5471cef1 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Wed, 15 Jan 2025 13:38:17 -0500 Subject: [PATCH 06/14] renamed notice and improved description --- .../validator/ContinuousPickupDropOffValidator.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 0710a811cb..48482b2c7a 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -15,7 +15,7 @@ * `stop_times.start_pickup_drop_off_window` or `stop_times.end_pickup_drop_off_window` are not * defined for any trip of this route. * - *

Generated notice: {@link ContinuousPickupDropOffNotice}. + *

Generated notice: {@link ForbiddenContinuousPickupDropOffNotice}. */ @GtfsValidator public class ContinuousPickupDropOffValidator extends FileValidator { @@ -48,7 +48,7 @@ public void validate(NoticeContainer noticeContainer) { for (GtfsStopTime stopTime : stopTimeTable.byTripId(trip.tripId())) { if (stopTime.hasStartPickupDropOffWindow() || stopTime.hasEndPickupDropOffWindow()) { noticeContainer.addValidationNotice( - new ContinuousPickupDropOffNotice( + new ForbiddenContinuousPickupDropOffNotice( route.csvRowNumber(), trip.tripId(), stopTime.startPickupDropOffWindow(), @@ -61,11 +61,11 @@ public void validate(NoticeContainer noticeContainer) { /** * Continuous pickup or drop-off are forbidden when routes.continuous_pickup or - * routes.continuous_drop_off are 2 or 3 and stop_times.start_pickup_drop_off_window or + * routes.continuous_drop_off are 0, 2 or 3 and stop_times.start_pickup_drop_off_window or * stop_times.end_pickup_drop_off_window are defined for any trip of this route. */ @GtfsValidationNotice(severity = ERROR) - public static class ContinuousPickupDropOffNotice extends ValidationNotice { + public static class ForbiddenContinuousPickupDropOffNotice extends ValidationNotice { /** The row number of the route in the CSV file. */ private final int routeCsvRowNumber; @@ -78,7 +78,7 @@ public static class ContinuousPickupDropOffNotice extends ValidationNotice { /** The end time of the pickup/drop-off window. */ private final GtfsTime endPickupDropOffWindow; - public ContinuousPickupDropOffNotice( + public ForbiddenContinuousPickupDropOffNotice( int routeCsvRowNumber, String tripId, GtfsTime startPickupDropOffWindow, From ce44b5d81f9c8b70ce6541da6045597165db669d Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Fri, 17 Jan 2025 11:31:15 -0500 Subject: [PATCH 07/14] changed logic of validation --- .../validator/ContinuousPickupDropOffValidator.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 48482b2c7a..77de4afd38 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -37,10 +37,8 @@ public ContinuousPickupDropOffValidator( public void validate(NoticeContainer noticeContainer) { for (GtfsRoute route : routeTable.getEntities()) { boolean continuous = - (route.hasContinuousPickup() - || route.continuousPickup() != GtfsContinuousPickupDropOff.NOT_AVAILABLE) - || (route.hasContinuousDropOff() - || route.continuousDropOff() != GtfsContinuousPickupDropOff.NOT_AVAILABLE); + (route.continuousPickup() == GtfsContinuousPickupDropOff.ALLOWED || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) + || (route.continuousDropOff() == GtfsContinuousPickupDropOff.ALLOWED || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); if (!continuous) { continue; } From c679b584134d0eab309d74cefe3c45c46fba377f Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Fri, 17 Jan 2025 11:40:45 -0500 Subject: [PATCH 08/14] reformatted code --- .../validator/ContinuousPickupDropOffValidator.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 77de4afd38..17aad35ee9 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -37,8 +37,12 @@ public ContinuousPickupDropOffValidator( public void validate(NoticeContainer noticeContainer) { for (GtfsRoute route : routeTable.getEntities()) { boolean continuous = - (route.continuousPickup() == GtfsContinuousPickupDropOff.ALLOWED || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) - || (route.continuousDropOff() == GtfsContinuousPickupDropOff.ALLOWED || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); + (route.continuousPickup() == GtfsContinuousPickupDropOff.ALLOWED + || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE + || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) + || (route.continuousDropOff() == GtfsContinuousPickupDropOff.ALLOWED + || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE + || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); if (!continuous) { continue; } From 01d60c6b4c3894fa5b12ff08fab3b6869383de60 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Fri, 17 Jan 2025 12:13:23 -0500 Subject: [PATCH 09/14] updated logic --- .../ContinuousPickupDropOffValidator.java | 6 ++-- .../ContinuousPickupDropOffValidatorTest.java | 33 ++----------------- 2 files changed, 4 insertions(+), 35 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 17aad35ee9..17fca8dbb4 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -37,11 +37,9 @@ public ContinuousPickupDropOffValidator( public void validate(NoticeContainer noticeContainer) { for (GtfsRoute route : routeTable.getEntities()) { boolean continuous = - (route.continuousPickup() == GtfsContinuousPickupDropOff.ALLOWED - || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE + (route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) - || (route.continuousDropOff() == GtfsContinuousPickupDropOff.ALLOWED - || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE + || (route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); if (!continuous) { continue; diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java index c333dbe33a..9ef3a3b7fa 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java @@ -35,36 +35,7 @@ public void continuousPickupWithPickupDropOffWindowShouldGenerateNotice() { new GtfsRoute.Builder() .setCsvRowNumber(1) .setRouteId("route1") - .setContinuousPickup(1) - .build()), - List.of( - new GtfsTrip.Builder() - .setCsvRowNumber(2) - .setTripId("trip1") - .setRouteId("route1") - .build()), - List.of( - new GtfsStopTime.Builder() - .setCsvRowNumber(3) - .setTripId("trip1") - .setStartPickupDropOffWindow(GtfsTime.fromString("08:00:00")) - .setEndPickupDropOffWindow(GtfsTime.fromString("09:00:00")) - .build())); - assertThat(notices) - .containsExactly( - new ContinuousPickupDropOffValidator.ContinuousPickupDropOffNotice( - 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); - } - - @Test - public void continuousDropOffWithPickupDropOffWindowShouldGenerateNotice() { - List notices = - generateNotices( - List.of( - new GtfsRoute.Builder() - .setCsvRowNumber(1) - .setRouteId("route1") - .setContinuousDropOff(2) + .setContinuousPickup(2) .build()), List.of( new GtfsTrip.Builder() @@ -81,7 +52,7 @@ public void continuousDropOffWithPickupDropOffWindowShouldGenerateNotice() { .build())); assertThat(notices) .containsExactly( - new ContinuousPickupDropOffValidator.ContinuousPickupDropOffNotice( + new ContinuousPickupDropOffValidator.ForbiddenContinuousPickupDropOffNotice( 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); } From 61eb7374a8ea779e8c9b44311d51374129b5b23b Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Wed, 22 Jan 2025 10:09:14 -0500 Subject: [PATCH 10/14] updated logic --- .../validator/ContinuousPickupDropOffValidator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 17fca8dbb4..b01d6a1143 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -39,8 +39,8 @@ public void validate(NoticeContainer noticeContainer) { boolean continuous = (route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) - || (route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE - || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); + || (route.continuousDropOff() == GtfsContinuousPickupDropOff.MUST_PHONE + || route.continuousDropOff() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); if (!continuous) { continue; } From 2aa7bd2afde5db74860c0082b4fb42cfd6ad1a7b Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Wed, 22 Jan 2025 10:37:15 -0500 Subject: [PATCH 11/14] revised logic --- .../validator/ContinuousPickupDropOffValidator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index b01d6a1143..956974cf7a 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -37,9 +37,11 @@ public ContinuousPickupDropOffValidator( public void validate(NoticeContainer noticeContainer) { for (GtfsRoute route : routeTable.getEntities()) { boolean continuous = - (route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE + (route.continuousPickup() == GtfsContinuousPickupDropOff.ALLOWED + || route.continuousPickup() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousPickup() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER) - || (route.continuousDropOff() == GtfsContinuousPickupDropOff.MUST_PHONE + || (route.continuousDropOff() == GtfsContinuousPickupDropOff.ALLOWED + || route.continuousDropOff() == GtfsContinuousPickupDropOff.MUST_PHONE || route.continuousDropOff() == GtfsContinuousPickupDropOff.ON_REQUEST_TO_DRIVER); if (!continuous) { continue; From b9dd2b5896ff86815dac72b56be7a744eb41b02c Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Wed, 22 Jan 2025 11:09:31 -0500 Subject: [PATCH 12/14] added shouldCallValidate method and null check --- .../validator/ContinuousPickupDropOffValidator.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 956974cf7a..4c7dcf5ab1 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -61,6 +61,18 @@ public void validate(NoticeContainer noticeContainer) { } } + @Override + public boolean shouldCallValidate() { + if (routeTable != null && stopTimeTable != null) { + return routeTable.hasColumn(GtfsRoute.CONTINUOUS_PICKUP_FIELD_NAME) + || routeTable.hasColumn(GtfsRoute.CONTINUOUS_DROP_OFF_FIELD_NAME) + && (stopTimeTable.hasColumn(GtfsStopTime.START_PICKUP_DROP_OFF_WINDOW_FIELD_NAME) + || stopTimeTable.hasColumn(GtfsStopTime.END_PICKUP_DROP_OFF_WINDOW_FIELD_NAME)); + } else { + return false; + } + } + /** * Continuous pickup or drop-off are forbidden when routes.continuous_pickup or * routes.continuous_drop_off are 0, 2 or 3 and stop_times.start_pickup_drop_off_window or From 868fe153490657ff94193f882cf58ee2e9f39a5d Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Wed, 22 Jan 2025 11:53:17 -0500 Subject: [PATCH 13/14] formatted code --- .../validator/ContinuousPickupDropOffValidator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index 4c7dcf5ab1..c1a077b4d8 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -65,9 +65,9 @@ public void validate(NoticeContainer noticeContainer) { public boolean shouldCallValidate() { if (routeTable != null && stopTimeTable != null) { return routeTable.hasColumn(GtfsRoute.CONTINUOUS_PICKUP_FIELD_NAME) - || routeTable.hasColumn(GtfsRoute.CONTINUOUS_DROP_OFF_FIELD_NAME) + || routeTable.hasColumn(GtfsRoute.CONTINUOUS_DROP_OFF_FIELD_NAME) && (stopTimeTable.hasColumn(GtfsStopTime.START_PICKUP_DROP_OFF_WINDOW_FIELD_NAME) - || stopTimeTable.hasColumn(GtfsStopTime.END_PICKUP_DROP_OFF_WINDOW_FIELD_NAME)); + || stopTimeTable.hasColumn(GtfsStopTime.END_PICKUP_DROP_OFF_WINDOW_FIELD_NAME)); } else { return false; } From 6d637a8ed2ce9ffb6b5475e2f6a9d63816514f97 Mon Sep 17 00:00:00 2001 From: Jingsi Lu Date: Tue, 28 Jan 2025 12:14:39 -0500 Subject: [PATCH 14/14] added stopTimeCsvRowNumber to Notice --- .../validator/ContinuousPickupDropOffValidator.java | 8 +++++++- .../validator/ContinuousPickupDropOffValidatorTest.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java index c1a077b4d8..6ba24582f3 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidator.java @@ -53,6 +53,7 @@ public void validate(NoticeContainer noticeContainer) { new ForbiddenContinuousPickupDropOffNotice( route.csvRowNumber(), trip.tripId(), + stopTime.csvRowNumber(), stopTime.startPickupDropOffWindow(), stopTime.endPickupDropOffWindow())); } @@ -80,12 +81,15 @@ public boolean shouldCallValidate() { */ @GtfsValidationNotice(severity = ERROR) public static class ForbiddenContinuousPickupDropOffNotice extends ValidationNotice { - /** The row number of the route in the CSV file. */ + /** The row number of the route in the `routes.txt` file. */ private final int routeCsvRowNumber; /** The ID of the trip. */ private final String tripId; + /** The row number of the stop time in the `stop_times.txt` file. */ + private final int stopTimeCsvRowNumber; + /** The start time of the pickup/drop-off window. */ private final GtfsTime startPickupDropOffWindow; @@ -95,10 +99,12 @@ public static class ForbiddenContinuousPickupDropOffNotice extends ValidationNot public ForbiddenContinuousPickupDropOffNotice( int routeCsvRowNumber, String tripId, + int stopTimesCsvRowNumber, GtfsTime startPickupDropOffWindow, GtfsTime endPickupDropOffWindow) { this.routeCsvRowNumber = routeCsvRowNumber; this.tripId = tripId; + this.stopTimeCsvRowNumber = stopTimesCsvRowNumber; this.startPickupDropOffWindow = startPickupDropOffWindow; this.endPickupDropOffWindow = endPickupDropOffWindow; } diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java index 9ef3a3b7fa..1034455647 100644 --- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java +++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ContinuousPickupDropOffValidatorTest.java @@ -53,7 +53,7 @@ public void continuousPickupWithPickupDropOffWindowShouldGenerateNotice() { assertThat(notices) .containsExactly( new ContinuousPickupDropOffValidator.ForbiddenContinuousPickupDropOffNotice( - 1, "trip1", GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); + 1, "trip1", 3, GtfsTime.fromString("08:00:00"), GtfsTime.fromString("09:00:00"))); } @Test