diff --git a/RULES.md b/RULES.md index 3ef9211289..7a1b317c50 100644 --- a/RULES.md +++ b/RULES.md @@ -144,12 +144,12 @@ Each Notice is associated with a severity: `INFO`, `WARNING`, `ERROR`. ## Table of INFOS -| Notice code | Description | -|-----------------------------------------------------------------------|-----------------------------------------------| -| [`platform_without_parent_station`](#platform_without_parent_station) | A platform has no `parent_station` field set. | -| [`unknown_column`](#unknown_column) | A column name is unknown. | -| [`unknown_file`](#unknown_file) | A file is unknown. | - +| Notice code | Description | +|-----------------------------------------------------------------------|--------------------------------------------------------------------------------------------------| +| [`platform_without_parent_station`](#platform_without_parent_station) | A platform has no `parent_station` field set. | +| [`unknown_column`](#unknown_column) | A column name is unknown. | +| [`unknown_file`](#unknown_file) | A file is unknown. | +| [`unused_parent_station`](#unused_parent_station) | A stop has `location_type` STATION (1) but does not appear in any stop's `parent_station` field. | @@ -2880,6 +2880,26 @@ A file is unknown. + + +### unused_parent_station + +A stop has `location_type` 1 (station) but does not appear in the +`parent_station` field for any stop with `location_type` 0 +(stop/platform) in `stops.txt`. + +#### Notice fields description +| Field name | Description | Type | +|------------------|----------------------------------------|------- | +| `csvRowNumber` | The row number of the faulty record. | Int | +| `stopId` | The id of the faulty stop. | String | +| `stopName` | The name of the faulty stop. | String | + +#### Affected files +* [`stops.txt`](http://gtfs.org/reference/static#stopstxt) + + + # More details - SYSTEM ERRORS diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidator.java similarity index 70% rename from main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidator.java rename to main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidator.java index 093aa4c92f..a7c9d796a6 100644 --- a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidator.java +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidator.java @@ -16,8 +16,11 @@ package org.mobilitydata.gtfsvalidator.validator; import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.ERROR; +import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.INFO; +import java.util.HashSet; import java.util.Optional; +import java.util.Set; import javax.inject.Inject; import org.mobilitydata.gtfsvalidator.annotation.GtfsValidationNotice; import org.mobilitydata.gtfsvalidator.annotation.GtfsValidationNotice.FileRefs; @@ -31,17 +34,21 @@ import org.mobilitydata.gtfsvalidator.table.GtfsStopTimeSchema; /** - * Validates `location_type` of the referenced `parent_station`. + * Validates parent stations are used and have the correct `location_type`. * - *
Generated notice: {@link WrongParentLocationTypeNotice}. + *
Generated notices: + * + *
A stop has `location_type` STATION (1) but does not appear in any stop's `parent_station`.
+ */
+ @GtfsValidationNotice(severity = INFO, files = @FileRefs({GtfsStopSchema.class}))
+ static class UnusedParentStationNotice extends ValidationNotice {
+ /** The row number of the faulty record. */
+ private final int csvRowNumber;
+
+ /** The id of the faulty stop. */
+ private final String stopId;
+
+ /** The name of the faulty stop. */
+ private final String stopName;
+
+ UnusedParentStationNotice(int csvRowNumber, String stopId, String stopName) {
+ this.csvRowNumber = csvRowNumber;
+ this.stopId = stopId;
+ this.stopName = stopName;
+ }
+ }
}
diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidatorTest.java
similarity index 67%
rename from main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidatorTest.java
rename to main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidatorTest.java
index 12ee8b4c5f..9543d859d8 100644
--- a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentLocationTypeValidatorTest.java
+++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/ParentStationValidatorTest.java
@@ -28,15 +28,16 @@
import org.mobilitydata.gtfsvalidator.table.GtfsLocationType;
import org.mobilitydata.gtfsvalidator.table.GtfsStop;
import org.mobilitydata.gtfsvalidator.table.GtfsStopTableContainer;
-import org.mobilitydata.gtfsvalidator.validator.ParentLocationTypeValidator.WrongParentLocationTypeNotice;
+import org.mobilitydata.gtfsvalidator.validator.ParentStationValidator.UnusedParentStationNotice;
+import org.mobilitydata.gtfsvalidator.validator.ParentStationValidator.WrongParentLocationTypeNotice;
@RunWith(JUnit4.class)
-public class ParentLocationTypeValidatorTest {
+public class ParentStationValidatorTest {
private List