
org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.service.vehiclerental.internal;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Envelope;
import org.opentripplanner.service.vehiclerental.VehicleRentalRepository;
import org.opentripplanner.service.vehiclerental.VehicleRentalService;
import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace;
import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation;
import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle;
import org.opentripplanner.street.model.RentalFormFactor;
import org.opentripplanner.transit.model.framework.FeedScopedId;
@Singleton
public class DefaultVehicleRentalService implements VehicleRentalService, VehicleRentalRepository {
@Inject
public DefaultVehicleRentalService() {}
private final Map rentalPlaces = new ConcurrentHashMap<>();
@Override
public Collection getVehicleRentalPlaces() {
return rentalPlaces.values();
}
@Override
public VehicleRentalPlace getVehicleRentalPlace(FeedScopedId id) {
return rentalPlaces.get(id);
}
@Override
public List getVehicleRentalVehicles() {
return rentalPlaces
.values()
.stream()
.filter(VehicleRentalVehicle.class::isInstance)
.map(VehicleRentalVehicle.class::cast)
.toList();
}
@Override
public VehicleRentalVehicle getVehicleRentalVehicle(FeedScopedId id) {
VehicleRentalPlace vehicleRentalPlace = rentalPlaces.get(id);
return vehicleRentalPlace instanceof VehicleRentalVehicle vehicleRentalVehicle
? vehicleRentalVehicle
: null;
}
@Override
public List getVehicleRentalStations() {
return getVehicleRentalStationsAsStream().toList();
}
@Override
public VehicleRentalStation getVehicleRentalStation(FeedScopedId id) {
VehicleRentalPlace vehicleRentalPlace = rentalPlaces.get(id);
return vehicleRentalPlace instanceof VehicleRentalStation vehicleRentalStation
? vehicleRentalStation
: null;
}
@Override
public void addVehicleRentalStation(VehicleRentalPlace vehicleRentalStation) {
rentalPlaces.put(vehicleRentalStation.getId(), vehicleRentalStation);
}
@Override
public void removeVehicleRentalStation(FeedScopedId vehicleRentalStationId) {
rentalPlaces.remove(vehicleRentalStationId);
}
@Override
public boolean hasRentalBikes() {
return rentalPlaces
.values()
.stream()
.anyMatch(place -> {
if (place instanceof VehicleRentalVehicle vehicle) {
return vehicle.vehicleType.formFactor == RentalFormFactor.BICYCLE;
} else if (place instanceof VehicleRentalStation station) {
return station.vehicleTypesAvailable
.keySet()
.stream()
.anyMatch(t -> t.formFactor == RentalFormFactor.BICYCLE);
} else {
return false;
}
});
}
@Override
public List getVehicleRentalStationForEnvelope(
double minLon,
double minLat,
double maxLon,
double maxLat
) {
Envelope envelope = new Envelope(
new Coordinate(minLon, minLat),
new Coordinate(maxLon, maxLat)
);
return getVehicleRentalStationsAsStream()
.filter(b -> envelope.contains(new Coordinate(b.getLongitude(), b.getLatitude())))
.toList();
}
private Stream getVehicleRentalStationsAsStream() {
return rentalPlaces
.values()
.stream()
.filter(VehicleRentalStation.class::isInstance)
.map(VehicleRentalStation.class::cast);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy