All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.api.resource.BikeRental Maven / Gradle / Ivy

package org.opentripplanner.api.resource;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.locationtech.jts.geom.Envelope;
import org.opentripplanner.api.mapping.VehicleRentalStationMapper;
import org.opentripplanner.api.model.ApiVehicleRentalStation;
import org.opentripplanner.api.model.ApiVehicleRentalStationList;
import org.opentripplanner.routing.vehicle_rental.VehicleRentalPlace;
import org.opentripplanner.routing.vehicle_rental.VehicleRentalStationService;
import org.opentripplanner.standalone.api.OtpServerRequestContext;

@Path("/routers/{ignoreRouterId}/bike_rental")
public class BikeRental {

  private final OtpServerRequestContext serverContext;

  public BikeRental(
    /**
     * @deprecated The support for multiple routers are removed from OTP2.
     * See https://github.com/opentripplanner/OpenTripPlanner/issues/2760
     */
    @Deprecated @PathParam("ignoreRouterId") String ignoreRouterId,
    @Context OtpServerRequestContext serverContext
  ) {
    this.serverContext = serverContext;
  }

  /** Envelopes are in latitude, longitude format */
  public static Envelope getEnvelope(String lowerLeft, String upperRight) {
    String[] lowerLeftParts = lowerLeft.split(",");
    String[] upperRightParts = upperRight.split(",");

    return new Envelope(
      Double.parseDouble(lowerLeftParts[1]),
      Double.parseDouble(upperRightParts[1]),
      Double.parseDouble(lowerLeftParts[0]),
      Double.parseDouble(upperRightParts[0])
    );
  }

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public ApiVehicleRentalStationList getBikeRentalStations(
    @QueryParam("lowerLeft") String lowerLeft,
    @QueryParam("upperRight") String upperRight,
    @QueryParam("locale") String locale_param
  ) {
    OtpServerRequestContext serverContext = this.serverContext;

    VehicleRentalStationService vehicleRentalService = serverContext
      .graph()
      .getVehicleRentalStationService();
    Locale locale = locale_param != null && !locale_param.isBlank()
      ? Locale.forLanguageTag(locale_param.replaceAll("-", "_"))
      : Locale.ENGLISH;
    if (vehicleRentalService == null) {
      return new ApiVehicleRentalStationList();
    }
    Envelope envelope;
    if (lowerLeft != null) {
      envelope = getEnvelope(lowerLeft, upperRight);
    } else {
      envelope = new Envelope(-180, 180, -90, 90);
    }
    Collection stations = vehicleRentalService.getVehicleRentalPlaces();
    List out = new ArrayList<>();
    for (VehicleRentalPlace station : stations) {
      if (envelope.contains(station.getLongitude(), station.getLatitude())) {
        out.add(VehicleRentalStationMapper.mapToApi(station, locale));
      }
    }
    ApiVehicleRentalStationList brsl = new ApiVehicleRentalStationList();
    brsl.stations = out;
    return brsl;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy