Skip to content

Commit 725cf4f

Browse files
authored
Merge pull request #105 from mobidata-bw/region_id_rule
feature: new rule to check that region_id in station_information exists
2 parents 44cc9cb + b04577d commit 725cf4f

File tree

6 files changed

+83
-0
lines changed

6 files changed

+83
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ The raw schema along with a map of the data feeds is passed to this method. The
5757

5858
List of additional rules:
5959

60+
* `NoInvalidReferenceToPricingPlansInVehicleStatus`
6061
* `NoInvalidReferenceToPricingPlansInVehicleTypes`
62+
* `NoInvalidReferenceToRegionInStationInformation`
6163
* `NoInvalidReferenceToVehicleTypesInStationStatus`
6264
* `NoMissingVehicleTypesAvailableWhenVehicleTypesExists`
6365
* `NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist`
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
*
3+
* *
4+
* *
5+
* * * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by
6+
* * * the European Commission - subsequent versions of the EUPL (the "Licence");
7+
* * * You may not use this work except in compliance with the Licence.
8+
* * * You may obtain a copy of the Licence at:
9+
* * *
10+
* * * https://joinup.ec.europa.eu/software/page/eupl
11+
* * *
12+
* * * Unless required by applicable law or agreed to in writing, software
13+
* * * distributed under the Licence is distributed on an "AS IS" basis,
14+
* * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* * * See the Licence for the specific language governing permissions and
16+
* * * limitations under the Licence.
17+
* *
18+
*
19+
*/
20+
21+
package org.entur.gbfs.validation.validator.rules;
22+
23+
import com.jayway.jsonpath.DocumentContext;
24+
import com.jayway.jsonpath.JsonPath;
25+
import org.json.JSONArray;
26+
import org.json.JSONObject;
27+
28+
import java.util.Map;
29+
30+
/**
31+
* References to regions in station_information must exist in the system's system_regions file
32+
*/
33+
public class NoInvalidReferenceToRegionInStationInformation
34+
implements CustomRuleSchemaPatcher {
35+
36+
public static final String REGION_IDS_SCHEMA_PATH =
37+
"$.properties.data.properties.stations.items.properties.region_id";
38+
39+
/**
40+
* Adds an enum to the region_id schema of stations.region_id with the region ids from system_regions.json
41+
*/
42+
@Override
43+
public DocumentContext addRule(
44+
DocumentContext rawSchemaDocumentContext,
45+
Map<String, JSONObject> feeds
46+
) {
47+
JSONObject systemRegionsFeed = feeds.get("system_regions");
48+
JSONObject regionIdSchema = rawSchemaDocumentContext.read(
49+
REGION_IDS_SCHEMA_PATH
50+
);
51+
52+
if (systemRegionsFeed != null) {
53+
JSONArray regionIds = JsonPath
54+
.parse(systemRegionsFeed)
55+
.read("$.data.regions[*].region_id");
56+
regionIdSchema.put("enum", regionIds);
57+
}
58+
59+
return rawSchemaDocumentContext
60+
.set(
61+
REGION_IDS_SCHEMA_PATH,
62+
regionIdSchema
63+
);
64+
}
65+
}

src/main/java/org/entur/gbfs/validation/validator/versions/Version21.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package org.entur.gbfs.validation.validator.versions;
2020

21+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToRegionInStationInformation;
2122
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2223
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
2324
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
@@ -59,6 +60,9 @@ public class Version21 extends AbstractVersion {
5960
),
6061
"system_information", List.of(
6162
new NoMissingStoreUriInSystemInformation("free_bike_status")
63+
),
64+
"station_information", List.of(
65+
new NoInvalidReferenceToRegionInStationInformation()
6266
)
6367
);
6468

src/main/java/org/entur/gbfs/validation/validator/versions/Version22.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
2222
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleStatus;
23+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToRegionInStationInformation;
2324
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2425
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2526
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
@@ -61,6 +62,9 @@ public class Version22 extends AbstractVersion {
6162
),
6263
"system_information", List.of(
6364
new NoMissingStoreUriInSystemInformation("free_bike_status")
65+
),
66+
"station_information", List.of(
67+
new NoInvalidReferenceToRegionInStationInformation()
6468
)
6569
);
6670

src/main/java/org/entur/gbfs/validation/validator/versions/Version23.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
2222
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleStatus;
2323
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleTypes;
24+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToRegionInStationInformation;
2425
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2526
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2627
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
@@ -65,6 +66,9 @@ public class Version23 extends AbstractVersion {
6566
),
6667
"system_information", List.of(
6768
new NoMissingStoreUriInSystemInformation("free_bike_status")
69+
),
70+
"station_information", List.of(
71+
new NoInvalidReferenceToRegionInStationInformation()
6872
)
6973
);
7074

src/main/java/org/entur/gbfs/validation/validator/versions/Version30.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
2222
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleStatus;
2323
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleTypes;
24+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToRegionInStationInformation;
2425
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2526
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2627
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
@@ -64,6 +65,9 @@ public class Version30 extends AbstractVersion {
6465
),
6566
"system_information", List.of(
6667
new NoMissingStoreUriInSystemInformation("vehicle_status")
68+
),
69+
"station_information", List.of(
70+
new NoInvalidReferenceToRegionInStationInformation()
6771
)
6872
);
6973

0 commit comments

Comments
 (0)