
org.opentripplanner.api.mapping.LegMapper 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
package org.opentripplanner.api.mapping;
import org.opentripplanner.api.model.ApiAlert;
import org.opentripplanner.api.model.ApiLeg;
import org.opentripplanner.model.plan.Leg;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
public class LegMapper {
private final WalkStepMapper walkStepMapper;
private final StreetNoteMaperMapper streetNoteMaperMapper;
private final AlertMapper alertMapper;
public LegMapper(Locale locale) {
this.walkStepMapper = new WalkStepMapper(locale);
this.streetNoteMaperMapper = new StreetNoteMaperMapper(locale);
this.alertMapper = new AlertMapper(locale);
}
public List mapLegs(List domain) {
if(domain == null) { return null; }
List apiLegs = new ArrayList<>();
final int size = domain.size();
final int lastIdx = size-1;
for (int i=0; i < size; ++i) {
Calendar arrivalTimeFromPlace = (i == 0) ? null : domain.get(i-1).endTime;
Calendar departureTimeToPlace = (i == lastIdx) ? null : domain.get(i+1).startTime;
apiLegs.add(mapLeg(domain.get(i), arrivalTimeFromPlace, departureTimeToPlace));
}
return apiLegs;
}
public ApiLeg mapLeg(Leg domain, Calendar arrivalTimeFromPlace, Calendar departureTimeToPlace) {
if(domain == null) { return null; }
ApiLeg api = new ApiLeg();
api.startTime = domain.startTime;
api.endTime = domain.endTime;
// Set the arrival and departure times, even if this is redundant information
api.from = PlaceMapper.mapPlace(domain.from, arrivalTimeFromPlace, api.startTime);
api.to = PlaceMapper.mapPlace(domain.to, api.endTime, departureTimeToPlace);
api.departureDelay = domain.departureDelay;
api.arrivalDelay = domain.arrivalDelay;
api.realTime = domain.realTime;
api.isNonExactFrequency = domain.isNonExactFrequency;
api.headway = domain.headway;
api.distance = domain.distanceMeters;
api.pathway = domain.pathway;
api.mode = TraverseModeMapper.mapToApi(domain.mode);
api.agencyTimeZoneOffset = domain.agencyTimeZoneOffset;
api.transitLeg = domain.isTransitLeg();
if(domain.isTransitLeg()) {
var agency = domain.getAgency();
api.agencyId = FeedScopedIdMapper.mapToApi(agency.getId());
api.agencyName = agency.getName();
api.agencyUrl = agency.getUrl();
api.agencyBrandingUrl = agency.getBrandingUrl();
var route = domain.getRoute();
api.route = route.getLongName();
api.routeColor = route.getColor();
api.routeType = domain.routeType;
api.routeId = FeedScopedIdMapper.mapToApi(route.getId());
api.routeShortName = route.getShortName();
api.routeLongName = route.getLongName();
api.routeTextColor = route.getTextColor();
var trip = domain.getTrip();
api.tripId = FeedScopedIdMapper.mapToApi(trip.getId());
api.tripShortName = trip.getTripShortName();
api.tripBlockId = trip.getBlockId();
}
else {
// TODO OTP2 - This should be set to the street name according to the JavaDoc
api.route = "";
}
api.interlineWithPreviousLeg = domain.interlineWithPreviousLeg;
api.headsign = domain.headsign;
api.serviceDate = ServiceDateMapper.mapToApi(domain.serviceDate);
api.routeBrandingUrl = domain.routeBrandingUrl;
api.intermediateStops = PlaceMapper.mapStopArrivals(domain.intermediateStops);
api.legGeometry = domain.legGeometry;
api.steps = walkStepMapper.mapWalkSteps(domain.walkSteps);
api.alerts = concatenateAlerts(
streetNoteMaperMapper.mapToApi(domain.streetNotes),
alertMapper.mapToApi(domain.transitAlerts)
);
api.boardRule = domain.boardRule;
api.alightRule = domain.alightRule;
api.rentedBike = domain.rentedBike;
return api;
}
private static List concatenateAlerts(List a, List b) {
if (a == null) {
return b;
} else if (b == null) {
return a;
} else {
List ret = new ArrayList<>(a);
ret.addAll(b);
return ret;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy