Skip to content

Commit bdc0a4b

Browse files
authored
Merge pull request #95 from mobidata-bw/vehicles-pricing-plan-rule
Add NoInvalidReferenceToPricingPlansInVehicleStatus rule
2 parents 526ec2e + 59204cc commit bdc0a4b

File tree

7 files changed

+85
-13
lines changed

7 files changed

+85
-13
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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+
* A vehicle's pricing_plan_id must exist in the system's system_pricing_plan file
32+
*/
33+
public class NoInvalidReferenceToPricingPlansInVehicleStatus implements CustomRuleSchemaPatcher {
34+
35+
public static final String VEHICLE_PRICING_PLAN_ID_SCHEMA_PATH = "$.properties.data.properties.vehicles.items.properties.pricing_plan_id";
36+
public static final String BIKE_PRICING_PLAN_ID_SCHEMA_PATH = "$.properties.data.properties.bikes.items.properties.pricing_plan_id";
37+
38+
private final String fileName;
39+
40+
public NoInvalidReferenceToPricingPlansInVehicleStatus(String fileName) {
41+
this.fileName = fileName;
42+
}
43+
44+
/**
45+
* Adds an enum to vehicle_status's pricing_plan_id schema with the plan ids from the system_pricing_plan feed
46+
*/
47+
@Override
48+
public DocumentContext addRule(DocumentContext rawSchemaDocumentContext, Map<String, JSONObject> feeds) {
49+
JSONObject pricingPlansFeed = feeds.get("system_pricing_plans");
50+
51+
String requiredPath = VEHICLE_PRICING_PLAN_ID_SCHEMA_PATH;
52+
// backwards compatibility
53+
if (fileName.equals("free_bike_status")) {
54+
requiredPath = BIKE_PRICING_PLAN_ID_SCHEMA_PATH;
55+
}
56+
JSONObject pricingPlanIdSchema = rawSchemaDocumentContext.read(requiredPath);
57+
58+
if (pricingPlansFeed != null) {
59+
JSONArray pricingPlanIds = JsonPath.parse(pricingPlansFeed).read("$.data.plans[*].plan_id");
60+
pricingPlanIdSchema.put("enum", pricingPlanIds);
61+
}
62+
63+
return rawSchemaDocumentContext
64+
.set(requiredPath, pricingPlanIdSchema);
65+
}
66+
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818

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

21-
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2221
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
22+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToPricingPlansInVehicleStatus;
23+
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
24+
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2325
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
2426
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist;
25-
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2627
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypesAvailableWhenVehicleTypesExists;
2728

2829
import java.util.Arrays;
@@ -55,7 +56,8 @@ public class Version22 extends AbstractVersion {
5556
),
5657
"free_bike_status", List.of(
5758
new NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist("free_bike_status"),
58-
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("free_bike_status")
59+
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("free_bike_status"),
60+
new NoInvalidReferenceToPricingPlansInVehicleStatus("free_bike_status")
5961
),
6062
"system_information", List.of(
6163
new NoMissingStoreUriInSystemInformation("free_bike_status")

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

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

21-
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2221
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
22+
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.NoInvalidReferenceToVehicleTypesInStationStatus;
25+
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2426
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
2527
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist;
26-
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2728
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypesAvailableWhenVehicleTypesExists;
2829

2930
import java.util.Arrays;
@@ -59,7 +60,8 @@ public class Version23 extends AbstractVersion {
5960
),
6061
"free_bike_status", List.of(
6162
new NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist("free_bike_status"),
62-
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("free_bike_status")
63+
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("free_bike_status"),
64+
new NoInvalidReferenceToPricingPlansInVehicleStatus("free_bike_status")
6365
),
6466
"system_information", List.of(
6567
new NoMissingStoreUriInSystemInformation("free_bike_status")

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818

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

21-
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2221
import org.entur.gbfs.validation.validator.rules.CustomRuleSchemaPatcher;
22+
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.NoInvalidReferenceToVehicleTypesInStationStatus;
25+
import org.entur.gbfs.validation.validator.rules.NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles;
2426
import org.entur.gbfs.validation.validator.rules.NoMissingStoreUriInSystemInformation;
2527
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist;
26-
import org.entur.gbfs.validation.validator.rules.NoInvalidReferenceToVehicleTypesInStationStatus;
2728
import org.entur.gbfs.validation.validator.rules.NoMissingVehicleTypesAvailableWhenVehicleTypesExists;
2829

2930
import java.util.Arrays;
@@ -58,7 +59,8 @@ public class Version30 extends AbstractVersion {
5859
),
5960
"vehicle_status", List.of(
6061
new NoMissingVehicleTypeIdInVehicleStatusWhenVehicleTypesExist("vehicle_status"),
61-
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("vehicle_status")
62+
new NoMissingCurrentRangeMetersInVehicleStatusForMotorizedVehicles("vehicle_status"),
63+
new NoInvalidReferenceToPricingPlansInVehicleStatus("vehicle_status")
6264
),
6365
"system_information", List.of(
6466
new NoMissingStoreUriInSystemInformation("vehicle_status")

src/test/resources/fixtures/v2.2/free_bike_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"vehicle_type_id":"def456",
2222
"current_range_meters":6543,
2323
"station_id":"86",
24-
"pricing_plan_id":"plan3"
24+
"pricing_plan_id":"plan2"
2525
}
2626
]
2727
}

src/test/resources/fixtures/v2.3/free_bike_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"vehicle_type_id":"def456",
2626
"current_range_meters":6543.0,
2727
"station_id":"86",
28-
"pricing_plan_id":"plan3"
28+
"pricing_plan_id":"bike_plan_1"
2929
}
3030
]
3131
}

src/test/resources/fixtures/v3.0/vehicle_status.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"vehicle_type_id":"def456",
2626
"current_range_meters":6543.0,
2727
"station_id":"86",
28-
"pricing_plan_id":"plan3"
28+
"pricing_plan_id":"bike_plan_1"
2929
},
3030
{
3131
"vehicle_id":"45bd3fb7-a2d5-4def-9de1-c645844ba962",
@@ -52,7 +52,7 @@
5252
"current_fuel_percent":0.7,
5353
"current_range_meters":6543.0,
5454
"station_id":"86",
55-
"pricing_plan_id":"plan3",
55+
"pricing_plan_id":"bike_plan_1",
5656
"home_station_id":"146",
5757
"vehicle_equipment":[
5858
"child_seat_a"

0 commit comments

Comments
 (0)