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

org.opentripplanner.routing.api.request.RequestModes Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.routing.api.request;

import static org.opentripplanner.routing.api.request.StreetMode.NOT_SET;

import java.util.Objects;
import org.opentripplanner.utils.tostring.ToStringBuilder;

public class RequestModes {

  /**
   * The RequestModes is mutable, so we need to keep a private default set of modes.
   */
  private static final RequestModes DEFAULTS = new RequestModes(
    StreetMode.WALK,
    StreetMode.WALK,
    StreetMode.WALK,
    StreetMode.WALK
  );

  public final StreetMode accessMode;

  public final StreetMode egressMode;

  public final StreetMode directMode;

  public final StreetMode transferMode;

  private RequestModes(
    StreetMode accessMode,
    StreetMode egressMode,
    StreetMode directMode,
    StreetMode transferMode
  ) {
    this.accessMode = (accessMode != null && accessMode.accessAllowed()) ? accessMode : NOT_SET;
    this.egressMode = (egressMode != null && egressMode.egressAllowed()) ? egressMode : NOT_SET;
    this.directMode = directMode != null ? directMode : NOT_SET;
    this.transferMode = (transferMode != null && transferMode.transferAllowed())
      ? transferMode
      : NOT_SET;
  }

  public RequestModes(RequestModesBuilder builder) {
    this(builder.accessMode(), builder.egressMode(), builder.directMode(), builder.transferMode());
  }

  /**
   * Return a mode builder with the defaults set.
   */
  public static RequestModesBuilder of() {
    return DEFAULTS.copyOf();
  }

  public RequestModesBuilder copyOf() {
    return new RequestModesBuilder(this);
  }

  /**
   * Return the default set of modes with WALK for all street modes and all transit modes set.
   * Tip: Use the {@link #of()} to change the defaults.
   */
  public static RequestModes defaultRequestModes() {
    return DEFAULTS;
  }

  public boolean contains(StreetMode streetMode) {
    return (
      streetMode.equals(accessMode) ||
      streetMode.equals(egressMode) ||
      streetMode.equals(directMode)
    );
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    RequestModes that = (RequestModes) o;

    if (accessMode != that.accessMode) {
      return false;
    }
    if (egressMode != that.egressMode) {
      return false;
    }
    if (directMode != that.directMode) {
      return false;
    }

    return transferMode == that.transferMode;
  }

  @Override
  public int hashCode() {
    return Objects.hash(accessMode, egressMode, directMode, transferMode);
  }

  @Override
  public String toString() {
    return ToStringBuilder.of(RequestModes.class)
      .addEnum("accessMode", accessMode)
      .addEnum("egressMode", egressMode)
      .addEnum("directMode", directMode)
      .addEnum("transferMode", transferMode)
      .toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy