
org.opentripplanner.apis.gtfs.datafetchers.AlertImpl 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 static org.opentripplanner.apis.gtfs.mapping.AlertEffectMapper.getGraphQLEffect;
import static org.opentripplanner.apis.gtfs.mapping.SeverityMapper.getGraphQLSeverity;
import graphql.relay.Relay;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import java.time.Instant;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import org.opentripplanner.apis.gtfs.GraphQLRequestContext;
import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers;
import org.opentripplanner.apis.gtfs.generated.GraphQLTypes;
import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertEffectType;
import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertSeverityLevelType;
import org.opentripplanner.apis.gtfs.mapping.AlertCauseMapper;
import org.opentripplanner.apis.gtfs.model.RouteTypeModel;
import org.opentripplanner.apis.gtfs.model.StopOnRouteModel;
import org.opentripplanner.apis.gtfs.model.StopOnTripModel;
import org.opentripplanner.apis.gtfs.model.UnknownModel;
import org.opentripplanner.framework.i18n.I18NString;
import org.opentripplanner.framework.i18n.TranslatedString;
import org.opentripplanner.routing.alertpatch.EntitySelector;
import org.opentripplanner.routing.alertpatch.EntitySelector.DirectionAndRoute;
import org.opentripplanner.routing.alertpatch.TransitAlert;
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.site.StopLocation;
import org.opentripplanner.transit.model.timetable.Direction;
import org.opentripplanner.transit.model.timetable.Trip;
import org.opentripplanner.transit.service.TransitService;
public class AlertImpl implements GraphQLDataFetchers.GraphQLAlert {
private static final String FALLBACK_EMPTY_STRING = "";
@Override
public DataFetcher agency() {
return environment ->
getSource(environment)
.entities()
.stream()
.filter(EntitySelector.Agency.class::isInstance)
.findAny()
.map(EntitySelector.Agency.class::cast)
.map(entitySelector ->
getTransitService(environment).getAgencyForId(entitySelector.agencyId())
)
.orElse(null);
}
@Override
public DataFetcher alertCause() {
return environment -> AlertCauseMapper.getGraphQLCause(getSource(environment).cause());
}
@Override
public DataFetcher alertDescriptionText() {
return environment -> {
var alert = getSource(environment);
return alert
.descriptionText()
.or(alert::headerText)
.map(t -> t.toString(environment.getLocale()))
.orElse(FALLBACK_EMPTY_STRING);
};
}
@Override
public DataFetcher>> alertDescriptionTextTranslations() {
return environment ->
getSource(environment).descriptionText().map(this::getTranslations).orElse(List.of());
}
@Override
public DataFetcher alertEffect() {
return environment -> getGraphQLEffect(getSource(environment).effect());
}
@Override
public DataFetcher alertHash() {
return environment -> {
TransitAlert alert = getSource(environment);
return Objects.hash(
alert.descriptionText(),
alert.headerText(),
alert.url(),
alert.cause(),
alert.effect(),
alert.severity()
);
};
}
@Override
public DataFetcher alertHeaderText() {
return environment -> {
var alert = getSource(environment);
return alert
.headerText()
.or(alert::descriptionText)
.map(h -> h.toString(environment.getLocale()))
.orElse(FALLBACK_EMPTY_STRING);
};
}
@Override
public DataFetcher>> alertHeaderTextTranslations() {
return environment ->
getSource(environment).headerText().map(this::getTranslations).orElse(List.of());
}
@Override
public DataFetcher alertSeverityLevel() {
return environment -> getGraphQLSeverity(getSource(environment).severity());
}
@Override
public DataFetcher alertUrl() {
return environment ->
getSource(environment).url().map(u -> u.toString(environment.getLocale())).orElse(null);
}
@Override
public DataFetcher>> alertUrlTranslations() {
return environment -> getSource(environment).url().map(this::getTranslations).orElse(List.of());
}
@Override
public DataFetcher effectiveEndDate() {
return environment -> {
Instant effectiveEndDate = getSource(environment).getEffectiveEndDate();
if (effectiveEndDate == null) {
return null;
}
return effectiveEndDate.getEpochSecond();
};
}
@Override
public DataFetcher effectiveStartDate() {
return environment -> {
Instant effectiveStartDate = getSource(environment).getEffectiveStartDate();
if (effectiveStartDate == null) {
return null;
}
return effectiveStartDate.getEpochSecond();
};
}
@Override
public DataFetcher> entities() {
return environment ->
getSource(environment)
.entities()
.stream()
.map(entitySelector -> {
if (entitySelector instanceof EntitySelector.Stop) {
FeedScopedId id = ((EntitySelector.Stop) entitySelector).stopId();
StopLocation stop = getTransitService(environment).getRegularStop(id);
return List.of(getAlertEntityOrUnknown(stop, id.toString(), "stop"));
}
if (entitySelector instanceof EntitySelector.Agency) {
FeedScopedId id = ((EntitySelector.Agency) entitySelector).agencyId();
Agency agency = getTransitService(environment).getAgencyForId(id);
return List.of(getAlertEntityOrUnknown(agency, id.toString(), "agency"));
}
if (entitySelector instanceof EntitySelector.Route) {
FeedScopedId id = ((EntitySelector.Route) entitySelector).routeId();
Route route = getTransitService(environment).getRouteForId(id);
return List.of(getAlertEntityOrUnknown(route, id.toString(), "route"));
}
if (entitySelector instanceof EntitySelector.Trip) {
FeedScopedId id = ((EntitySelector.Trip) entitySelector).tripId();
Trip trip = getTransitService(environment).getTripForId(id);
return List.of(getAlertEntityOrUnknown(trip, id.toString(), "trip"));
}
if (entitySelector instanceof EntitySelector.StopAndRoute stopAndRoute) {
FeedScopedId stopId = stopAndRoute.stopId();
FeedScopedId routeId = stopAndRoute.routeId();
StopLocation stop = getTransitService(environment).getRegularStop(stopId);
Route route = getTransitService(environment).getRouteForId(routeId);
return List.of(
stop != null && route != null
? new StopOnRouteModel(stop, route)
: getUnknownForAlertEntityPair(
stop,
route,
stopId.toString(),
routeId.toString(),
"stop",
"route"
)
);
}
if (entitySelector instanceof EntitySelector.StopAndTrip stopAndTrip) {
FeedScopedId stopId = stopAndTrip.stopId();
FeedScopedId tripId = stopAndTrip.tripId();
StopLocation stop = getTransitService(environment).getRegularStop(stopId);
Trip trip = getTransitService(environment).getTripForId(tripId);
return List.of(
stop != null && trip != null
? new StopOnTripModel(stop, trip)
: getUnknownForAlertEntityPair(
stop,
trip,
stopId.toString(),
tripId.toString(),
"stop",
"trip"
)
);
}
if (entitySelector instanceof EntitySelector.RouteTypeAndAgency) {
FeedScopedId agencyId = ((EntitySelector.RouteTypeAndAgency) entitySelector).agencyId();
int routeType = ((EntitySelector.RouteTypeAndAgency) entitySelector).routeType();
Agency agency = getTransitService(environment).getAgencyForId(agencyId);
return List.of(
agency != null
? new RouteTypeModel(agency, routeType, agency.getId().getFeedId())
: getUnknownForAlertEntityPair(
agency,
routeType,
null,
Integer.toString(routeType),
"agency",
"route type"
)
);
}
if (entitySelector instanceof EntitySelector.RouteType) {
int routeType = ((EntitySelector.RouteType) entitySelector).routeType();
String feedId = ((EntitySelector.RouteType) entitySelector).feedId();
return List.of(new RouteTypeModel(null, routeType, feedId));
}
if (entitySelector instanceof EntitySelector.DirectionAndRoute) {
Direction direction = ((DirectionAndRoute) entitySelector).direction();
FeedScopedId routeId = ((EntitySelector.DirectionAndRoute) entitySelector).routeId();
Route route = getTransitService(environment).getRouteForId(routeId);
return route != null
? getTransitService(environment)
.getPatternsForRoute(route)
.stream()
.filter(pattern -> pattern.getDirection() == direction)
.collect(Collectors.toList())
: List.of(
getUnknownForAlertEntityPair(
route,
direction,
null,
direction.name(),
"route",
"direction"
)
);
}
if (entitySelector instanceof EntitySelector.Unknown) {
final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy