org.opentripplanner.model.Trip 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
/* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */
package org.opentripplanner.model;
import javax.validation.constraints.NotNull;
public final class Trip extends TransitEntity {
private static final long serialVersionUID = 1L;
private Route route;
private Operator operator;
private TransitMode mode;
private String netexSubmode;
private FeedScopedId serviceId;
private String tripShortName;
private String internalPlanningCode;
private String tripHeadsign;
private String routeShortName;
@NotNull
private Direction direction = Direction.UNKNOWN;
private String blockId;
private FeedScopedId shapeId;
private int wheelchairAccessible = 0;
/**
* 0 = unknown / unspecified, 1 = bikes allowed, 2 = bikes NOT allowed
*/
private BikeAccess bikesAllowed = BikeAccess.UNKNOWN;
/** Custom extension for KCM to specify a fare per-trip */
private String fareId;
/**
* Default alteration for a trip. // TODO Implement alterations for DSJ
*
* This is planned, by default (e.g. GTFS and if not set explicit).
*/
private TripAlteration alteration = TripAlteration.PLANNED;
public Trip(FeedScopedId id) {
super(id);
}
public Trip(Trip obj) {
this(obj.getId());
this.route = obj.route;
this.operator = obj.operator;
this.serviceId = obj.serviceId;
this.mode = obj.mode;
this.netexSubmode = obj.netexSubmode;
this.tripShortName = obj.tripShortName;
this.tripHeadsign = obj.tripHeadsign;
this.routeShortName = obj.routeShortName;
this.direction = obj.direction;
this.blockId = obj.blockId;
this.shapeId = obj.shapeId;
this.wheelchairAccessible = obj.wheelchairAccessible;
this.bikesAllowed = obj.bikesAllowed;
this.fareId = obj.fareId;
}
/**
* Operator running the trip. Returns operator of this trip, if it exist, or else the route operator.
*/
public Operator getOperator() {
return operator != null ? operator : route.getOperator();
}
/**
* This method return the operator associated with the trip. If the Trip have no Operator set {@code null} is
* returned. Note! this method do not consider the {@link Route} that the trip is part of.
* @see #getOperator()
*/
public Operator getTripOperator() {
return operator;
}
public void setTripOperator(Operator operator) {
this.operator = operator;
}
public Route getRoute() {
return route;
}
public void setRoute(Route route) {
this.route = route;
}
public FeedScopedId getServiceId() {
return serviceId;
}
public void setServiceId(FeedScopedId serviceId) {
this.serviceId = serviceId;
}
public TransitMode getMode() {
return mode == null ? getRoute().getMode() : mode;
}
public void setMode(TransitMode mode) {
this.mode = mode.equals(getRoute().getMode()) ? null : mode;
}
public String getNetexSubmode() {
return netexSubmode == null ? getRoute().getNetexSubmode() : netexSubmode;
}
public void setNetexSubmode(String netexSubmode) {
this.netexSubmode = netexSubmode == null || netexSubmode.equals(getRoute().getNetexSubmode()) ? null : netexSubmode;
}
/**
* Public code or identifier for the journey. Equal to NeTEx PublicCode. GTFS and NeTEx have
* additional constraints on this fields that are not enforced in OTP.
*/
public String getTripShortName() {
return tripShortName;
}
public void setTripShortName(String tripShortName) {
this.tripShortName = tripShortName;
}
/**
* Return human friendly short info to identify the trip when mode, from/to stop and times are
* known. This method is meant for debug/logging, and should not be exposed in any API.
*/
public String logInfo() {
if(hasValue(tripShortName)) { return tripShortName; }
if(hasValue(routeShortName)) { return routeShortName; }
if(route != null && hasValue(route.getName())) { return route.getName(); }
if(hasValue(tripHeadsign)) { return tripHeadsign; }
return getId().getId();
}
/**
* Internal code (non-public identifier) for the journey (e.g. train- or trip number from
* the planners' tool). This is kept to ensure compatibility with legacy planning systems.
* In NeTEx this maps to privateCode, there is no GTFS equivalent.
*/
public String getInternalPlanningCode() { return internalPlanningCode; }
public void setInternalPlanningCode(String internalPlanningCode) {
this.internalPlanningCode = internalPlanningCode;
}
public String getTripHeadsign() {
return tripHeadsign;
}
public void setTripHeadsign(String tripHeadsign) {
this.tripHeadsign = tripHeadsign;
}
public String getRouteShortName() {
return routeShortName;
}
public void setRouteShortName(String routeShortName) {
this.routeShortName = routeShortName;
}
// TODO Consider moving this to the TripPattern class once we have refactored the transit model
/**
* The direction for this Trip (and all other Trips in this TripPattern).
*/
@NotNull
public Direction getDirection() {
return direction;
}
public String getGtfsDirectionIdAsString(String unknownValue) {
return direction.equals(Direction.UNKNOWN)
? unknownValue
: Integer.toString(direction.gtfsCode);
}
public void setDirection(Direction direction) {
// Enforce non-null
this.direction = direction != null ? direction : Direction.UNKNOWN;
}
public String getBlockId() {
return blockId;
}
public void setBlockId(String blockId) {
this.blockId = blockId;
}
public FeedScopedId getShapeId() {
return shapeId;
}
public void setShapeId(FeedScopedId shapeId) {
this.shapeId = shapeId;
}
public void setWheelchairAccessible(int wheelchairAccessible) {
this.wheelchairAccessible = wheelchairAccessible;
}
public int getWheelchairAccessible() {
return wheelchairAccessible;
}
public BikeAccess getBikesAllowed() {
return bikesAllowed;
}
public void setBikesAllowed(BikeAccess bikesAllowed) {
this.bikesAllowed = bikesAllowed;
}
public String toString() {
return "";
}
public String getFareId() {
return fareId;
}
public void setFareId(String fareId) {
this.fareId = fareId;
}
public TripAlteration getTripAlteration() {
return alteration;
}
public void setAlteration(TripAlteration tripAlteration) {
if (tripAlteration != null) {
this.alteration = tripAlteration;
}
}
private boolean hasValue(String text) {
return text != null && !text.isBlank();
}
}