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

org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.service.vehicleparking.model;

import java.util.List;
import java.util.Objects;
import org.opentripplanner.routing.graph.Graph;
import org.opentripplanner.street.model.edge.StreetVehicleParkingLink;
import org.opentripplanner.street.model.edge.VehicleParkingEdge;
import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex;
import org.opentripplanner.street.model.vertex.VertexFactory;

public class VehicleParkingHelper {

  private final VertexFactory vertexFactory;

  public VehicleParkingHelper(Graph graph) {
    Objects.requireNonNull(graph);
    this.vertexFactory = new VertexFactory(graph);
  }

  public void linkVehicleParkingToGraph(VehicleParking vehicleParking) {
    var vehicleParkingVertices = createVehicleParkingVertices(vehicleParking);
    VehicleParkingHelper.linkVehicleParkingEntrances(vehicleParkingVertices);
  }

  public List createVehicleParkingVertices(
    VehicleParking vehicleParking
  ) {
    return vehicleParking
      .getEntrances()
      .stream()
      .map(vertexFactory::vehicleParkingEntrance)
      .toList();
  }

  public static void linkVehicleParkingEntrances(
    List vehicleParkingVertices
  ) {
    for (int i = 0; i < vehicleParkingVertices.size(); i++) {
      var currentVertex = vehicleParkingVertices.get(i);
      if (isUsableForParking(currentVertex, currentVertex)) {
        VehicleParkingEdge.createVehicleParkingEdge(currentVertex);
      }
      for (int j = i + 1; j < vehicleParkingVertices.size(); j++) {
        var nextVertex = vehicleParkingVertices.get(j);
        if (isUsableForParking(currentVertex, nextVertex)) {
          VehicleParkingEdge.createVehicleParkingEdge(currentVertex, nextVertex);
          VehicleParkingEdge.createVehicleParkingEdge(nextVertex, currentVertex);
        }
      }
    }
  }

  public static void linkToGraph(VehicleParkingEntranceVertex vehicleParkingEntrance) {
    StreetVehicleParkingLink.createStreetVehicleParkingLink(
      vehicleParkingEntrance,
      vehicleParkingEntrance.getParkingEntrance().getVertex()
    );
    StreetVehicleParkingLink.createStreetVehicleParkingLink(
      vehicleParkingEntrance.getParkingEntrance().getVertex(),
      vehicleParkingEntrance
    );
    vehicleParkingEntrance.getParkingEntrance().clearVertex();
  }

  private static boolean isUsableForParking(
    VehicleParkingEntranceVertex from,
    VehicleParkingEntranceVertex to
  ) {
    var usableForBikeParking =
      from.getVehicleParking().hasBicyclePlaces() &&
      from.isWalkAccessible() &&
      to.isWalkAccessible();

    var usableForCarParking =
      from.getVehicleParking().hasAnyCarPlaces() &&
      ((from.isCarAccessible() && to.isWalkAccessible()) ||
        (from.isWalkAccessible() && to.isCarAccessible()));

    return usableForBikeParking || usableForCarParking;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy