
org.opentripplanner.updater.vehicle_rental.datasources.GbfsStationStatusMapper Maven / Gradle / Ivy
package org.opentripplanner.updater.vehicle_rental.datasources;
import java.time.Instant;
import java.util.Map;
import java.util.stream.Collectors;
import org.entur.gbfs.v2_2.station_status.GBFSStation;
import org.opentripplanner.common.model.T2;
import org.opentripplanner.routing.vehicle_rental.RentalVehicleType;
import org.opentripplanner.routing.vehicle_rental.VehicleRentalStation;
public class GbfsStationStatusMapper {
private final Map statusLookup;
private final Map vehicleTypes;
public GbfsStationStatusMapper(
Map statusLookup,
Map vehicleTypes
) {
this.statusLookup = statusLookup;
this.vehicleTypes = vehicleTypes;
}
void fillStationStatus(VehicleRentalStation station) {
if (!statusLookup.containsKey(station.getStationId())) {
station.realTimeData = false;
return;
}
GBFSStation status = statusLookup.get(station.getStationId());
station.vehiclesAvailable =
status.getNumBikesAvailable() != null ? status.getNumBikesAvailable().intValue() : 0;
station.vehicleTypesAvailable =
status.getVehicleTypesAvailable() != null
? status
.getVehicleTypesAvailable()
.stream()
.collect(
Collectors.toMap(
e -> vehicleTypes.get(e.getVehicleTypeId()),
e -> e.getCount().intValue()
)
)
: Map.of(RentalVehicleType.getDefaultType(station.getNetwork()), station.vehiclesAvailable);
station.vehiclesDisabled =
status.getNumBikesDisabled() != null ? status.getNumBikesDisabled().intValue() : 0;
station.spacesAvailable =
status.getNumDocksAvailable() != null
? status.getNumDocksAvailable().intValue()
: Integer.MAX_VALUE;
station.vehicleSpacesAvailable =
status.getVehicleDocksAvailable() != null
? status
.getVehicleDocksAvailable()
.stream()
.flatMap(available ->
available
.getVehicleTypeIds()
.stream()
.map(t -> new T2<>(vehicleTypes.get(t), available.getCount().intValue()))
)
.collect(Collectors.toMap(t -> t.first, t -> t.second))
: Map.of(RentalVehicleType.getDefaultType(station.getNetwork()), station.spacesAvailable);
station.spacesDisabled =
status.getNumDocksDisabled() != null ? status.getNumDocksDisabled().intValue() : 0;
station.isInstalled = status.getIsInstalled() != null ? status.getIsInstalled() : true;
station.isRenting = status.getIsRenting() != null ? status.getIsRenting() : true;
station.isReturning = status.getIsReturning() != null ? status.getIsReturning() : true;
station.lastReported =
status.getLastReported() != null
? Instant.ofEpochSecond(status.getLastReported().longValue())
: null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy