
org.opentripplanner.apis.gtfs.datafetchers.PatternImpl 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.apis.gtfs.datafetchers;
import gnu.trove.set.TIntSet;
import graphql.relay.Relay;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.opentripplanner.apis.gtfs.GraphQLRequestContext;
import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers;
import org.opentripplanner.apis.gtfs.generated.GraphQLTypes;
import org.opentripplanner.apis.support.SemanticHash;
import org.opentripplanner.framework.graphql.GraphQLUtils;
import org.opentripplanner.framework.time.ServiceDateUtils;
import org.opentripplanner.routing.alertpatch.EntitySelector;
import org.opentripplanner.routing.alertpatch.TransitAlert;
import org.opentripplanner.routing.services.TransitAlertService;
import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService;
import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle;
import org.opentripplanner.transit.model.framework.FeedScopedId;
import org.opentripplanner.transit.model.network.Route;
import org.opentripplanner.transit.model.network.TripPattern;
import org.opentripplanner.transit.model.organization.Agency;
import org.opentripplanner.transit.model.timetable.Trip;
import org.opentripplanner.transit.model.timetable.TripTimes;
import org.opentripplanner.transit.service.TransitService;
public class PatternImpl implements GraphQLDataFetchers.GraphQLPattern {
@Override
public DataFetcher> alerts() {
return environment -> {
TransitAlertService alertService = getTransitService(environment).getTransitAlertService();
var args = new GraphQLTypes.GraphQLPatternAlertsArgs(environment.getArguments());
List types = args.getGraphQLTypes();
if (types != null) {
Collection alerts = new ArrayList<>();
types.forEach(type -> {
switch (type) {
case PATTERN:
alerts.addAll(
alertService.getDirectionAndRouteAlerts(
getSource(environment).getDirection(),
getRoute(environment).getId()
)
);
break;
case AGENCY:
alerts.addAll(alertService.getAgencyAlerts(getAgency(environment).getId()));
break;
case ROUTE:
alerts.addAll(alertService.getRouteAlerts(getRoute(environment).getId()));
break;
case ROUTE_TYPE:
int routeType = getRoute(environment).getGtfsType();
alerts.addAll(
alertService.getRouteTypeAlerts(
routeType,
getSource(environment).getId().getFeedId()
)
);
alerts.addAll(
alertService.getRouteTypeAndAgencyAlerts(routeType, getAgency(environment).getId())
);
break;
case TRIPS:
getTrips(environment)
.forEach(trip -> alerts.addAll(alertService.getTripAlerts(trip.getId(), null)));
break;
case STOPS_ON_PATTERN:
alerts.addAll(
alertService
.getAllAlerts()
.stream()
.filter(alert ->
alert
.entities()
.stream()
.anyMatch(entity ->
(
entity instanceof EntitySelector.StopAndRoute stopAndRoute &&
stopAndRoute.routeId().equals(getRoute(environment).getId())
)
)
)
.toList()
);
getSource(environment)
.getStops()
.forEach(stop -> {
FeedScopedId stopId = stop.getId();
alerts.addAll(alertService.getStopAlerts(stopId));
});
break;
case STOPS_ON_TRIPS:
Iterable trips = getTrips(environment);
trips.forEach(trip ->
alerts.addAll(
alertService
.getAllAlerts()
.stream()
.filter(alert ->
alert
.entities()
.stream()
.anyMatch(entity ->
(
entity instanceof EntitySelector.StopAndTrip stopAndTrip &&
stopAndTrip.tripId().equals(getSource(environment).getId())
)
)
)
.toList()
)
);
break;
}
});
return alerts.stream().distinct().collect(Collectors.toList());
} else {
return alertService.getDirectionAndRouteAlerts(
getSource(environment).getDirection(),
getRoute(environment).getId()
);
}
};
}
@Override
public DataFetcher code() {
return environment -> getSource(environment).getId().toString();
}
@Override
public DataFetcher directionId() {
return environment -> getSource(environment).getDirection().gtfsCode;
}
@Override
public DataFetcher> geometry() {
return environment -> {
LineString geometry = getSource(environment).getGeometry();
if (geometry == null) {
return null;
} else {
return Arrays.asList(geometry.getCoordinates());
}
};
}
@Override
public DataFetcher headsign() {
return environment ->
GraphQLUtils.getTranslation(getSource(environment).getTripHeadsign(), environment);
}
@Override
public DataFetcher id() {
return environment ->
new Relay.ResolvedGlobalId("Pattern", getSource(environment).getId().toString());
}
@Override
public DataFetcher name() {
return environment -> getSource(environment).getName();
}
@Override
public DataFetcher originalTripPattern() {
return environment -> getSource(environment).getOriginalTripPattern();
}
@Override
public DataFetcher patternGeometry() {
return environment -> getSource(environment).getGeometry();
}
@Override
public DataFetcher route() {
return this::getRoute;
}
@Override
public DataFetcher semanticHash() {
return environment -> SemanticHash.forTripPattern(getSource(environment), null);
}
@Override
public DataFetcher> stops() {
return this::getStops;
}
@Override
public DataFetcher> trips() {
return this::getTrips;
}
@Override
public DataFetcher> tripsForDate() {
return environment -> {
String serviceDate = new GraphQLTypes.GraphQLPatternTripsForDateArgs(
environment.getArguments()
)
.getGraphQLServiceDate();
try {
TIntSet services = getTransitService(environment)
.getServiceCodesRunningForDate(ServiceDateUtils.parseString(serviceDate));
return getSource(environment)
.getScheduledTimetable()
.getTripTimes()
.stream()
.filter(times -> services.contains(times.getServiceCode()))
.map(TripTimes::getTrip)
.collect(Collectors.toList());
} catch (ParseException e) {
return null; // Invalid date format
}
};
}
@Override
public DataFetcher> vehiclePositions() {
return environment ->
getRealtimeVehiclesService(environment).getRealtimeVehicles(this.getSource(environment));
}
private Agency getAgency(DataFetchingEnvironment environment) {
return getRoute(environment).getAgency();
}
private Route getRoute(DataFetchingEnvironment environment) {
return getSource(environment).getRoute();
}
private List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy