diff --git a/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidator.java b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidator.java new file mode 100644 index 0000000000..491a7027cd --- /dev/null +++ b/main/src/main/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidator.java @@ -0,0 +1,69 @@ +package org.mobilitydata.gtfsvalidator.validator; + +import static org.mobilitydata.gtfsvalidator.notice.SeverityLevel.WARNING; + +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +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.GtfsShape; +import org.mobilitydata.gtfsvalidator.table.GtfsShapeSchema; +import org.mobilitydata.gtfsvalidator.table.GtfsShapeTableContainer; + +/** + * Validates that every shape (identified by shape_id) has more than one shape_point + * + *
Generated notice: {@link SingleShapePointNotice}
+ */
+@GtfsValidator
+public class SingleShapePointValidator extends FileValidator {
+ private final GtfsShapeTableContainer shapeTable;
+
+ @Inject
+ SingleShapePointValidator(GtfsShapeTableContainer shapeTable) {
+ this.shapeTable = shapeTable;
+ }
+
+ @Override
+ public void validate(NoticeContainer noticeContainer) {
+ Map A shape should contain more than one shape point to visualize the route
+ */
+ @GtfsValidationNotice(
+ severity = WARNING,
+ files = @GtfsValidationNotice.FileRefs({GtfsShapeSchema.class}))
+ static class SingleShapePointNotice extends ValidationNotice {
+ /** The faulty record's id. */
+ private final String shapeId;
+
+ /** The row number of the faulty record. */
+ private final int csvRowNumber;
+
+ SingleShapePointNotice(String shapeId, int csvRowNumber) {
+ this.shapeId = shapeId;
+ this.csvRowNumber = csvRowNumber;
+ }
+ }
+}
diff --git a/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidatorTest.java b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidatorTest.java
new file mode 100644
index 0000000000..d81a010791
--- /dev/null
+++ b/main/src/test/java/org/mobilitydata/gtfsvalidator/validator/SingleShapePointValidatorTest.java
@@ -0,0 +1,59 @@
+package org.mobilitydata.gtfsvalidator.validator;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.junit.Test;
+import org.mobilitydata.gtfsvalidator.notice.NoticeContainer;
+import org.mobilitydata.gtfsvalidator.notice.ValidationNotice;
+import org.mobilitydata.gtfsvalidator.table.GtfsShape;
+import org.mobilitydata.gtfsvalidator.table.GtfsShapeTableContainer;
+
+public class SingleShapePointValidatorTest {
+ public static GtfsShape createShapePoint(
+ int csvRowNumber,
+ String shapeId,
+ double shapePtLat,
+ double shapePtLon,
+ int shapePtSequence,
+ double shapeDistTraveled) {
+ return new GtfsShape.Builder()
+ .setCsvRowNumber(csvRowNumber)
+ .setShapeId(shapeId)
+ .setShapePtLat(shapePtLat)
+ .setShapePtLon(shapePtLon)
+ .setShapePtSequence(shapePtSequence)
+ .setShapeDistTraveled(shapeDistTraveled)
+ .build();
+ }
+
+ private static List