Skip to content

Commit 76db9b5

Browse files
committed
Refactor defaults
1 parent fc7c77f commit 76db9b5

File tree

1 file changed

+124
-87
lines changed

1 file changed

+124
-87
lines changed

application/src/main/java/org/opentripplanner/apis/gtfs/DefaultValueInjector.java

Lines changed: 124 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import graphql.schema.GraphQLTypeVisitorStub;
1414
import graphql.util.TraversalControl;
1515
import graphql.util.TraverserContext;
16+
import java.util.HashMap;
17+
import java.util.Map;
18+
import javax.annotation.Nullable;
1619
import org.opentripplanner.routing.api.request.RouteRequest;
1720

1821
/**
@@ -21,10 +24,10 @@
2124
*/
2225
public class DefaultValueInjector extends GraphQLTypeVisitorStub implements GraphQLTypeVisitor {
2326

24-
private final RouteRequest defaultRouteRequest;
27+
private final Map<String, Value> defaultForKey;
2528

2629
public DefaultValueInjector(RouteRequest defaultRouteRequest) {
27-
this.defaultRouteRequest = defaultRouteRequest;
30+
this.defaultForKey = createDefaultMapping(defaultRouteRequest);
2831
}
2932

3033
@Override
@@ -64,92 +67,126 @@ private Value getDefaultValueForSchemaObject(
6467
// Arguments and input fields always have a parent
6568
var parent = (GraphQLNamedSchemaElement) context.getParentNode();
6669
var parentName = parent.getName();
67-
var key = parentName + "_" + name;
70+
var key = parentName + "." + name;
71+
return defaultForKey.get(key);
72+
}
73+
74+
private static Map<String, Value> createDefaultMapping(RouteRequest defaultRouteRequest) {
75+
var builder = new DefaultMappingBuilder();
6876
var preferences = defaultRouteRequest.preferences();
69-
switch (key) {
70-
case "planConnection_first":
71-
return IntValue.of(defaultRouteRequest.numItineraries());
72-
case "planConnection_searchWindow":
73-
return defaultRouteRequest.searchWindow() != null
74-
? StringValue.of(defaultRouteRequest.searchWindow().toString())
75-
: null;
76-
case "AlightPreferencesInput_slack":
77-
return StringValue.of(preferences.transit().alightSlack().defaultValue().toString());
78-
case "BicycleParkingPreferencesInput_unpreferredCost":
79-
return IntValue.of(
80-
preferences.bike().parking().unpreferredVehicleParkingTagCost().toSeconds()
81-
);
82-
case "BicyclePreferencesInput_boardCost":
83-
return IntValue.of(preferences.bike().boardCost());
84-
case "BicyclePreferencesInput_reluctance":
85-
return FloatValue.of(preferences.bike().reluctance());
86-
case "BicyclePreferencesInput_speed":
87-
return FloatValue.of(preferences.bike().speed());
88-
case "BicycleWalkPreferencesCostInput_mountDismountCost":
89-
return IntValue.of(preferences.bike().walking().mountDismountCost().toSeconds());
90-
case "BicycleWalkPreferencesCostInput_reluctance":
91-
return FloatValue.of(preferences.bike().walking().reluctance());
92-
case "BicycleWalkPreferencesInput_mountDismountTime":
93-
return StringValue.of(preferences.bike().walking().mountDismountTime().toString());
94-
case "BicycleWalkPreferencesInput_speed":
95-
return FloatValue.of(preferences.bike().walking().speed());
96-
case "BoardPreferencesInput_slack":
97-
return StringValue.of(preferences.transit().boardSlack().defaultValue().toString());
98-
case "BoardPreferencesInput_waitReluctance":
99-
return FloatValue.of(preferences.transfer().waitReluctance());
100-
case "CarParkingPreferencesInput_unpreferredCost":
101-
return IntValue.of(
102-
preferences.car().parking().unpreferredVehicleParkingTagCost().toSeconds()
103-
);
104-
case "CarPreferencesInput_reluctance":
105-
return FloatValue.of(preferences.car().reluctance());
106-
case "DestinationBicyclePolicyInput_allowKeeping":
107-
return BooleanValue.of(
108-
preferences.bike().rental().allowArrivingInRentedVehicleAtDestination()
109-
);
110-
case "DestinationBicyclePolicyInput_keepingCost":
111-
return IntValue.of(
112-
preferences.bike().rental().arrivingInRentalVehicleAtDestinationCost().toSeconds()
113-
);
114-
case "DestinationScooterPolicyInput_allowKeeping":
115-
return BooleanValue.of(
116-
preferences.scooter().rental().allowArrivingInRentedVehicleAtDestination()
117-
);
118-
case "DestinationScooterPolicyInput_keepingCost":
119-
return IntValue.of(
120-
preferences.scooter().rental().arrivingInRentalVehicleAtDestinationCost().toSeconds()
121-
);
122-
case "ScooterPreferencesInput_reluctance":
123-
return FloatValue.of(preferences.scooter().reluctance());
124-
case "ScooterPreferencesInput_speed":
125-
return FloatValue.of(preferences.scooter().speed());
126-
case "TimetablePreferencesInput_excludeRealTimeUpdates":
127-
return BooleanValue.of(preferences.transit().ignoreRealtimeUpdates());
128-
case "TimetablePreferencesInput_includePlannedCancellations":
129-
return BooleanValue.of(preferences.transit().includePlannedCancellations());
130-
case "TimetablePreferencesInput_includeRealTimeCancellations":
131-
return BooleanValue.of(preferences.transit().includeRealtimeCancellations());
132-
case "TransferPreferencesInput_cost":
133-
return IntValue.of(preferences.transfer().cost());
134-
case "TransferPreferencesInput_maximumAdditionalTransfers":
135-
return IntValue.of(preferences.transfer().maxAdditionalTransfers());
136-
case "TransferPreferencesInput_maximumTransfers":
137-
// Max transfers are wrong in the internal model but fixed in the API mapping
138-
return IntValue.of(preferences.transfer().maxTransfers() - 1);
139-
case "TransferPreferencesInput_slack":
140-
return StringValue.of(preferences.transfer().slack().toString());
141-
case "WalkPreferencesInput_boardCost":
142-
return IntValue.of(preferences.walk().boardCost());
143-
case "WalkPreferencesInput_reluctance":
144-
return FloatValue.of(preferences.walk().reluctance());
145-
case "WalkPreferencesInput_safetyFactor":
146-
return FloatValue.of(preferences.walk().safetyFactor());
147-
case "WalkPreferencesInput_speed":
148-
return FloatValue.of(preferences.walk().speed());
149-
case "WheelchairPreferencesInput_enabled":
150-
return BooleanValue.of(defaultRouteRequest.wheelchair());
151-
default:
152-
return null;
77+
return builder
78+
.intReq("planConnection.first", defaultRouteRequest.numItineraries())
79+
.stringOpt("planConnection.searchWindow", defaultRouteRequest.searchWindow())
80+
.stringReq("AlightPreferencesInput.slack", preferences.transit().alightSlack().defaultValue())
81+
.intReq(
82+
"BicycleParkingPreferencesInput.unpreferredCost",
83+
preferences.bike().parking().unpreferredVehicleParkingTagCost().toSeconds()
84+
)
85+
.intReq("BicyclePreferencesInput.boardCost", preferences.bike().boardCost())
86+
.floatReq("BicyclePreferencesInput.reluctance", preferences.bike().reluctance())
87+
.floatReq("BicyclePreferencesInput.speed", preferences.bike().speed())
88+
.intReq(
89+
"BicycleWalkPreferencesCostInput.mountDismountCost",
90+
preferences.bike().walking().mountDismountCost().toSeconds()
91+
)
92+
.floatReq(
93+
"BicycleWalkPreferencesCostInput.reluctance",
94+
preferences.bike().walking().reluctance()
95+
)
96+
.stringReq(
97+
"BicycleWalkPreferencesInput.mountDismountTime",
98+
preferences.bike().walking().mountDismountTime()
99+
)
100+
.floatReq("BicycleWalkPreferencesInput.speed", preferences.bike().walking().speed())
101+
.stringReq("BoardPreferencesInput.slack", preferences.transit().boardSlack().defaultValue())
102+
.floatReq("BoardPreferencesInput.waitReluctance", preferences.transfer().waitReluctance())
103+
.intReq(
104+
"CarParkingPreferencesInput.unpreferredCost",
105+
preferences.car().parking().unpreferredVehicleParkingTagCost().toSeconds()
106+
)
107+
.floatReq("CarPreferencesInput.reluctance", preferences.car().reluctance())
108+
.boolReq(
109+
"DestinationBicyclePolicyInput.allowKeeping",
110+
preferences.bike().rental().allowArrivingInRentedVehicleAtDestination()
111+
)
112+
.intReq(
113+
"DestinationBicyclePolicyInput.keepingCost",
114+
preferences.bike().rental().arrivingInRentalVehicleAtDestinationCost().toSeconds()
115+
)
116+
.boolReq(
117+
"DestinationScooterPolicyInput.allowKeeping",
118+
preferences.scooter().rental().allowArrivingInRentedVehicleAtDestination()
119+
)
120+
.intReq(
121+
"DestinationScooterPolicyInput.keepingCost",
122+
preferences.scooter().rental().arrivingInRentalVehicleAtDestinationCost().toSeconds()
123+
)
124+
.floatReq("ScooterPreferencesInput.reluctance", preferences.scooter().reluctance())
125+
.floatReq("ScooterPreferencesInput.speed", preferences.scooter().speed())
126+
.boolReq(
127+
"TimetablePreferencesInput.excludeRealTimeUpdates",
128+
preferences.transit().ignoreRealtimeUpdates()
129+
)
130+
.boolReq(
131+
"TimetablePreferencesInput.includePlannedCancellations",
132+
preferences.transit().includePlannedCancellations()
133+
)
134+
.boolReq(
135+
"TimetablePreferencesInput.includeRealTimeCancellations",
136+
preferences.transit().includeRealtimeCancellations()
137+
)
138+
.intReq("TransferPreferencesInput.cost", preferences.transfer().cost())
139+
.intReq(
140+
"TransferPreferencesInput.maximumAdditionalTransfers",
141+
preferences.transfer().maxAdditionalTransfers()
142+
)
143+
// Max transfers are wrong in the internal model but fixed in the API mapping
144+
.intReq(
145+
"TransferPreferencesInput.maximumTransfers",
146+
preferences.transfer().maxTransfers() - 1
147+
)
148+
.stringReq("TransferPreferencesInput.slack", preferences.transfer().slack())
149+
.intReq("WalkPreferencesInput.boardCost", preferences.walk().boardCost())
150+
.floatReq("WalkPreferencesInput.reluctance", preferences.walk().reluctance())
151+
.floatReq("WalkPreferencesInput.safetyFactor", preferences.walk().safetyFactor())
152+
.floatReq("WalkPreferencesInput.speed", preferences.walk().speed())
153+
.boolReq("WheelchairPreferencesInput.enabled", defaultRouteRequest.wheelchair())
154+
.build();
155+
}
156+
157+
private static class DefaultMappingBuilder {
158+
159+
private final Map<String, Value> defaultValueForKey = new HashMap<String, Value>();
160+
161+
public DefaultMappingBuilder intReq(String key, int value) {
162+
defaultValueForKey.put(key, IntValue.of(value));
163+
return this;
164+
}
165+
166+
public DefaultMappingBuilder floatReq(String key, double value) {
167+
defaultValueForKey.put(key, FloatValue.of(value));
168+
return this;
169+
}
170+
171+
public DefaultMappingBuilder stringReq(String key, Object value) {
172+
defaultValueForKey.put(key, StringValue.of(value.toString()));
173+
return this;
174+
}
175+
176+
public DefaultMappingBuilder stringOpt(String key, @Nullable Object value) {
177+
if (value != null) {
178+
defaultValueForKey.put(key, StringValue.of(value.toString()));
179+
}
180+
return this;
181+
}
182+
183+
public DefaultMappingBuilder boolReq(String key, boolean value) {
184+
defaultValueForKey.put(key, BooleanValue.of(value));
185+
return this;
186+
}
187+
188+
public Map<String, Value> build() {
189+
return defaultValueForKey;
153190
}
154191
}
155192
}

0 commit comments

Comments
 (0)