
org.opentripplanner.routing.api.request.RouteViaRequest 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.routing.api.request;
import java.io.Serializable;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.function.Consumer;
import org.opentripplanner.model.GenericLocation;
import org.opentripplanner.routing.api.request.preference.RoutingPreferences;
import org.opentripplanner.routing.api.request.request.JourneyRequest;
/**
* Trip planning request with a list of via points.
*/
public class RouteViaRequest implements Serializable {
private final GenericLocation from;
private final List viaSegments;
private final GenericLocation to;
private final Instant dateTime;
private final Duration searchWindow;
private final boolean wheelchair;
private final RoutingPreferences preferences;
private final Locale locale;
private final Integer numItineraries;
private RouteViaRequest(List viaLocations, List viaJourneys) {
if (viaLocations == null || viaLocations.isEmpty()) {
throw new IllegalArgumentException("viaLocations must not be empty");
}
if (
viaJourneys == null || viaJourneys.isEmpty() || viaJourneys.size() != viaLocations.size() + 1
) {
throw new IllegalArgumentException("There must be one more JourneyRequest than ViaLocation");
}
this.from = null;
this.viaSegments = new ArrayList<>();
this.to = null;
this.dateTime = Instant.now();
this.searchWindow = null;
this.wheelchair = false;
this.preferences = new RoutingPreferences();
this.locale = null;
this.numItineraries = null;
// Last ViaSegment has no ViaLocation
for (int i = 0; i < viaJourneys.size(); i++) {
var viaLocation = i < viaJourneys.size() - 1 ? viaLocations.get(i) : null;
viaSegments.add(new ViaSegment(viaJourneys.get(i), viaLocation));
}
}
private RouteViaRequest(Builder builder) {
this.from = Objects.requireNonNull(builder.from);
this.viaSegments = Objects.requireNonNull(builder.viaSegments);
this.to = Objects.requireNonNull(builder.to);
this.dateTime = Objects.requireNonNull(builder.dateTime);
this.searchWindow = Objects.requireNonNull(builder.searchWindow);
this.wheelchair = builder.wheelchair;
this.locale = builder.locale;
this.preferences = Objects.requireNonNull(builder.preferences);
this.numItineraries = builder.numItineraries;
}
public static Builder of(List viaLocations, List viaJourneys) {
return new Builder(new RouteViaRequest(viaLocations, viaJourneys));
}
public Builder copyOf() {
return new Builder(this);
}
public RouteRequest routeRequest() {
var request = new RouteRequest();
request.setTo(to);
request.setFrom(from);
request.setSearchWindow(searchWindow);
request.setDateTime(dateTime);
request.setWheelchair(wheelchair);
request.setPreferences(preferences);
if (numItineraries != null) {
request.setNumItineraries(numItineraries);
}
return request;
}
public GenericLocation from() {
return from;
}
public List viaSegment() {
return viaSegments;
}
public GenericLocation to() {
return to;
}
public Instant dateTime() {
return dateTime;
}
public Duration searchWindow() {
return searchWindow;
}
public boolean wheelchair() {
return wheelchair;
}
public RoutingPreferences preferences() {
return preferences;
}
public Locale locale() {
return locale;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof RouteViaRequest other)) {
return false;
}
return (
viaSegments.equals(other.viaSegments) &&
from.equals(other.from) &&
to.equals(other.to) &&
dateTime.equals(other.dateTime) &&
searchWindow.equals(other.searchWindow) &&
wheelchair == other.wheelchair &&
Objects.equals(locale, other.locale) &&
preferences.equals(other.preferences) &&
Objects.equals(numItineraries, other.numItineraries)
);
}
@Override
public int hashCode() {
return Objects.hash(
viaSegments,
from,
to,
dateTime,
searchWindow,
wheelchair,
locale,
preferences,
numItineraries
);
}
public static class Builder {
private final List viaSegments;
private GenericLocation from;
private GenericLocation to;
private Instant dateTime;
private Duration searchWindow;
private Locale locale;
private boolean wheelchair;
private RoutingPreferences preferences;
private Integer numItineraries;
public Builder(RouteViaRequest original) {
this.from = original.from;
this.to = original.to;
this.dateTime = original.dateTime;
this.searchWindow = original.searchWindow;
this.wheelchair = original.wheelchair;
this.preferences = original.preferences;
this.viaSegments = original.viaSegments;
this.numItineraries = original.numItineraries;
}
public RouteViaRequest build() {
return new RouteViaRequest(this);
}
public Builder withFrom(GenericLocation from) {
this.from = from;
return this;
}
public Builder withTo(GenericLocation to) {
this.to = to;
return this;
}
public Builder withDateTime(Instant dateTime) {
this.dateTime = dateTime;
return this;
}
public Builder withSearchWindow(Duration searchWindow) {
this.searchWindow = searchWindow;
return this;
}
public Builder withLocale(Locale locale) {
this.locale = locale;
return this;
}
public Builder withWheelchair(boolean wheelchair) {
this.wheelchair = wheelchair;
return this;
}
public Builder withPreferences(Consumer prefs) {
preferences = preferences.copyOf().apply(prefs).build();
return this;
}
public Builder withNumItineraries(Integer numItineraries) {
this.numItineraries = numItineraries;
return this;
}
}
/**
* ViaSegments contains the {@link JourneyRequest} to the next {@link ViaLocation}. The last
* segment has null viaLocation, as `to` is the destination of that segment.
*/
public record ViaSegment(JourneyRequest journeyRequest, ViaLocation viaLocation) {}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy