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

org.opentripplanner.service.vehiclerental.street.GeofencingZoneExtension Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.service.vehiclerental.street;

/**
 * Traversal is restricted by the properties of the geofencing zone.
 */

import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import org.opentripplanner.service.vehiclerental.model.GeofencingZone;
import org.opentripplanner.street.model.RentalRestrictionExtension;
import org.opentripplanner.street.search.state.State;

/**
 * Traversal is restricted by the properties of the geofencing zone.
 */
public final class GeofencingZoneExtension implements RentalRestrictionExtension {

  private final GeofencingZone zone;

  public GeofencingZoneExtension(GeofencingZone zone) {
    this.zone = zone;
  }

  public GeofencingZone zone() {
    return zone;
  }

  @Override
  public boolean traversalBanned(State state) {
    if (state.isRentingVehicle()) {
      return (
        zone.traversalBanned() &&
        (state.unknownRentalNetwork() ||
          zone.id().getFeedId().equals(state.getVehicleRentalNetwork()))
      );
    } else {
      return false;
    }
  }

  @Override
  public boolean dropOffBanned(State state) {
    if (state.isRentingVehicle()) {
      return (
        zone.dropOffBanned() && zone.id().getFeedId().equals(state.getVehicleRentalNetwork())
      );
    } else {
      return false;
    }
  }

  @Override
  public Set debugTypes() {
    var set = EnumSet.noneOf(RestrictionType.class);
    if (zone.traversalBanned()) {
      set.add(RestrictionType.NO_TRAVERSAL);
    }
    if (zone.dropOffBanned()) {
      set.add(RestrictionType.NO_DROP_OFF);
    }
    return set;
  }

  @Override
  public List toList() {
    return List.of(this);
  }

  @Override
  public List networks() {
    return List.of(zone.id().getFeedId());
  }

  @Override
  public boolean hasRestrictions() {
    return true;
  }

  @Override
  public Set noDropOffNetworks() {
    if (zone.dropOffBanned()) {
      return Set.of(zone.id().getFeedId());
    } else {
      return Set.of();
    }
  }

  @Override
  public String toString() {
    return zone.id().toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy