All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.apis.gtfs.datafetchers.PlanConnectionImpl Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.apis.gtfs.datafetchers;

import graphql.relay.ConnectionCursor;
import graphql.relay.DefaultConnectionCursor;
import graphql.relay.DefaultEdge;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import java.time.Duration;
import java.time.OffsetDateTime;
import org.opentripplanner.apis.gtfs.GraphQLRequestContext;
import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers;
import org.opentripplanner.apis.gtfs.model.PlanPageInfo;
import org.opentripplanner.model.plan.Itinerary;
import org.opentripplanner.routing.api.response.RoutingError;
import org.opentripplanner.routing.api.response.RoutingResponse;
import org.opentripplanner.transit.service.TransitService;

public class PlanConnectionImpl implements GraphQLDataFetchers.GraphQLPlanConnection {

  @Override
  public DataFetcher searchDateTime() {
    return environment -> {
      var transitService = getTransitService(environment);
      var instant = getSource(environment).getTripPlan().date;
      return instant.atOffset(transitService.getTimeZone().getRules().getOffset(instant));
    };
  }

  @Override
  public DataFetcher>> edges() {
    return environment ->
      getSource(environment)
        .getTripPlan()
        .itineraries.stream()
        .map(itinerary -> new DefaultEdge<>(itinerary, new DefaultConnectionCursor("NoCursor")))
        .toList();
  }

  @Override
  public DataFetcher> routingErrors() {
    return environment -> getSource(environment).getRoutingErrors();
  }

  @Override
  public DataFetcher pageInfo() {
    return environment -> {
      var startCursor = getSource(environment).getNextPageCursor() != null
        ? getSource(environment).getPreviousPageCursor().encode()
        : null;
      ConnectionCursor startConnectionCursor = null;
      if (startCursor != null) {
        startConnectionCursor = new DefaultConnectionCursor(startCursor);
      }
      var endCursor = getSource(environment).getPreviousPageCursor() != null
        ? getSource(environment).getNextPageCursor().encode()
        : null;
      ConnectionCursor endConnectionCursor = null;
      if (endCursor != null) {
        endConnectionCursor = new DefaultConnectionCursor(endCursor);
      }
      Duration searchWindowUsed = null;
      var metadata = getSource(environment).getMetadata();
      if (metadata != null) {
        searchWindowUsed = metadata.searchWindowUsed;
      }
      return new PlanPageInfo(
        startConnectionCursor,
        endConnectionCursor,
        startCursor != null,
        endCursor != null,
        searchWindowUsed
      );
    };
  }

  private TransitService getTransitService(DataFetchingEnvironment environment) {
    return environment.getContext().transitService();
  }

  private RoutingResponse getSource(DataFetchingEnvironment environment) {
    return environment.getSource();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy