
org.opentripplanner.standalone.config.routerconfig.UpdatersConfig Maven / Gradle / Ivy
package org.opentripplanner.standalone.config.routerconfig;
import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA;
import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.BIKE_RENTAL;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.MQTT_GTFS_RT_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.REAL_TIME_ALERTS;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_AZURE_ET_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_AZURE_SX_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_ET_GOOGLE_PUBSUB_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_ET_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_SX_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.SIRI_VM_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.STOP_TIME_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_PARKING;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_POSITIONS;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_RENTAL;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.WEBSOCKET_GTFS_RT_UPDATER;
import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.WINKKI_POLLING_UPDATER;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import javax.annotation.Nullable;
import org.opentripplanner.ext.siri.updater.SiriETGooglePubsubUpdaterParameters;
import org.opentripplanner.ext.siri.updater.SiriETUpdaterParameters;
import org.opentripplanner.ext.siri.updater.SiriSXUpdaterParameters;
import org.opentripplanner.ext.siri.updater.SiriVMUpdaterParameters;
import org.opentripplanner.ext.siri.updater.azure.SiriAzureETUpdaterParameters;
import org.opentripplanner.ext.siri.updater.azure.SiriAzureSXUpdaterParameters;
import org.opentripplanner.ext.vehiclerentalservicedirectory.VehicleRentalServiceDirectoryFetcher;
import org.opentripplanner.ext.vehiclerentalservicedirectory.api.VehicleRentalServiceDirectoryFetcherParameters;
import org.opentripplanner.standalone.config.framework.json.NodeAdapter;
import org.opentripplanner.standalone.config.routerconfig.updaters.GtfsRealtimeAlertsUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.MqttGtfsRealtimeUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.PollingStoptimeUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.SiriETGooglePubsubUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.SiriETUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.SiriSXUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.SiriVMUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleParkingUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleRentalUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.WFSNotePollingGraphUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.WebsocketGtfsRealtimeUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.azure.SiriAzureETUpdaterConfig;
import org.opentripplanner.standalone.config.routerconfig.updaters.azure.SiriAzureSXUpdaterConfig;
import org.opentripplanner.standalone.config.sandbox.VehicleRentalServiceDirectoryFetcherConfig;
import org.opentripplanner.updater.TimetableSnapshotSourceParameters;
import org.opentripplanner.updater.UpdatersParameters;
import org.opentripplanner.updater.alert.GtfsRealtimeAlertsUpdaterParameters;
import org.opentripplanner.updater.street_note.WFSNotePollingGraphUpdaterParameters;
import org.opentripplanner.updater.trip.MqttGtfsRealtimeUpdaterParameters;
import org.opentripplanner.updater.trip.PollingTripUpdaterParameters;
import org.opentripplanner.updater.trip.WebsocketGtfsRealtimeUpdaterParameters;
import org.opentripplanner.updater.vehicle_parking.VehicleParkingUpdaterParameters;
import org.opentripplanner.updater.vehicle_position.VehiclePositionsUpdaterParameters;
import org.opentripplanner.updater.vehicle_rental.VehicleRentalUpdaterParameters;
/**
* This class maps between the JSON array of updaters and the concrete class implementations of each
* updater parameters. Some updaters use the same parameters, so a map is kept between the JSON
* updater type strings and the appropriate updater parameter class.
*/
public class UpdatersConfig implements UpdatersParameters {
private final Multimap configList = ArrayListMultimap.create();
private final TimetableSnapshotSourceParameters timetableUpdates;
@Nullable
private final VehicleRentalServiceDirectoryFetcherParameters vehicleRentalServiceDirectoryFetcherParameters;
public UpdatersConfig(NodeAdapter rootAdapter) {
this.vehicleRentalServiceDirectoryFetcherParameters =
VehicleRentalServiceDirectoryFetcherConfig.create(
"vehicleRentalServiceDirectory",
rootAdapter
);
timetableUpdates =
timetableUpdates(
rootAdapter
.of("timetableUpdates")
.since(V2_2)
.summary("Global configuration for timetable updaters.")
.asObject()
);
rootAdapter
.of("updaters")
.since(NA)
.summary("Configuration for the updaters that import various types of data into OTP.")
.asObjects(it -> {
Type type = it.of("type").since(NA).summary("The type of the updater.").asEnum(Type.class);
var config = type.parseConfig(it);
configList.put(type, config);
// We do not care what we return here
return config;
});
}
/**
* Read "timetableUpdates" parameters. These parameters are used to configure the
* TimetableSnapshotSource. Both the GTFS and Siri version uses the same parameters.
*/
private TimetableSnapshotSourceParameters timetableUpdates(NodeAdapter c) {
var dflt = TimetableSnapshotSourceParameters.DEFAULT;
if (c.isEmpty()) {
return dflt;
}
return new TimetableSnapshotSourceParameters(
c
.of("maxSnapshotFrequency")
.since(V2_2)
.summary("How long a snapshot should be cached.")
.description(
"If a timetable snapshot is requested less than this number of milliseconds after the previous snapshot, then return the same instance. " +
"Throttles the potentially resource-consuming task of duplicating a TripPattern → Timetable map and indexing the new Timetables. " +
"Applies to GTFS-RT and Siri updates."
)
.asInt(dflt.maxSnapshotFrequencyMs()),
c
.of("purgeExpiredData")
.since(V2_2)
.summary(
"Should expired realtime data be purged from the graph. Apply to GTFS-RT and Siri updates."
)
.asBoolean(dflt.purgeExpiredData())
);
}
public TimetableSnapshotSourceParameters timetableSnapshotParameters() {
return timetableUpdates;
}
/**
* This is the endpoint url used for the VehicleRentalServiceDirectory sandbox feature.
*
* @see VehicleRentalServiceDirectoryFetcher
*/
@Override
@Nullable
public VehicleRentalServiceDirectoryFetcherParameters getVehicleRentalServiceDirectoryFetcherParameters() {
return this.vehicleRentalServiceDirectoryFetcherParameters;
}
@Override
public List getVehicleRentalParameters() {
ArrayList result = new ArrayList<>(
getParameters(VEHICLE_RENTAL)
);
result.addAll(getParameters(BIKE_RENTAL));
return result;
}
@Override
public List getGtfsRealtimeAlertsUpdaterParameters() {
return getParameters(REAL_TIME_ALERTS);
}
@Override
public List getPollingStoptimeUpdaterParameters() {
return getParameters(STOP_TIME_UPDATER);
}
@Override
public List getVehiclePositionsUpdaterParameters() {
return getParameters(VEHICLE_POSITIONS);
}
@Override
public List getSiriETUpdaterParameters() {
return getParameters(SIRI_ET_UPDATER);
}
@Override
public List getSiriETGooglePubsubUpdaterParameters() {
return getParameters(SIRI_ET_GOOGLE_PUBSUB_UPDATER);
}
@Override
public List getSiriSXUpdaterParameters() {
return getParameters(SIRI_SX_UPDATER);
}
@Override
public List getSiriVMUpdaterParameters() {
return getParameters(SIRI_VM_UPDATER);
}
@Override
public List getWebsocketGtfsRealtimeUpdaterParameters() {
return getParameters(WEBSOCKET_GTFS_RT_UPDATER);
}
@Override
public List getMqttGtfsRealtimeUpdaterParameters() {
return getParameters(MQTT_GTFS_RT_UPDATER);
}
@Override
public List getVehicleParkingUpdaterParameters() {
return getParameters(VEHICLE_PARKING);
}
@Override
public List getWinkkiPollingGraphUpdaterParameters() {
return getParameters(WINKKI_POLLING_UPDATER);
}
@Override
public List getSiriAzureETUpdaterParameters() {
return getParameters(SIRI_AZURE_ET_UPDATER);
}
@Override
public List getSiriAzureSXUpdaterParameters() {
return getParameters(SIRI_AZURE_SX_UPDATER);
}
private List getParameters(Type key) {
return (List) configList.get(key);
}
public enum Type {
// TODO: deprecated, remove in next major version
BIKE_PARK(VehicleParkingUpdaterConfig::create),
VEHICLE_PARKING(VehicleParkingUpdaterConfig::create),
// TODO: deprecated, remove in next major version
BIKE_RENTAL(VehicleRentalUpdaterConfig::create),
VEHICLE_RENTAL(VehicleRentalUpdaterConfig::create),
STOP_TIME_UPDATER(PollingStoptimeUpdaterConfig::create),
WEBSOCKET_GTFS_RT_UPDATER(WebsocketGtfsRealtimeUpdaterConfig::create),
MQTT_GTFS_RT_UPDATER(MqttGtfsRealtimeUpdaterConfig::create),
REAL_TIME_ALERTS(GtfsRealtimeAlertsUpdaterConfig::create),
VEHICLE_POSITIONS(VehiclePositionsUpdaterConfig::create),
WINKKI_POLLING_UPDATER(WFSNotePollingGraphUpdaterConfig::create),
SIRI_ET_UPDATER(SiriETUpdaterConfig::create),
SIRI_ET_GOOGLE_PUBSUB_UPDATER(SiriETGooglePubsubUpdaterConfig::create),
SIRI_VM_UPDATER(SiriVMUpdaterConfig::create),
SIRI_SX_UPDATER(SiriSXUpdaterConfig::create),
SIRI_AZURE_ET_UPDATER(SiriAzureETUpdaterConfig::create),
SIRI_AZURE_SX_UPDATER(SiriAzureSXUpdaterConfig::create);
private final BiFunction factory;
Type(BiFunction factory) {
this.factory = factory;
}
Object parseConfig(NodeAdapter nodeAdapter) {
return factory.apply(this.name(), nodeAdapter);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy