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

org.opentripplanner.ext.legacygraphqlapi.datafetchers.LegacyGraphQLStoptimeImpl Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version
package org.opentripplanner.ext.legacygraphqlapi.datafetchers;

import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import org.opentripplanner.ext.legacygraphqlapi.LegacyGraphQLRequestContext;
import org.opentripplanner.ext.legacygraphqlapi.generated.LegacyGraphQLDataFetchers;
import org.opentripplanner.model.StopTime;
import org.opentripplanner.model.Trip;
import org.opentripplanner.model.TripTimeOnDate;
import org.opentripplanner.routing.RoutingService;

public class LegacyGraphQLStoptimeImpl implements LegacyGraphQLDataFetchers.LegacyGraphQLStoptime {

  @Override
  public DataFetcher stop() {
    return environment -> getRoutingService(environment).getStopForId(getSource(environment).getStopId());
  }

  @Override
  public DataFetcher scheduledArrival() {
    return environment -> missingValueToNull(getSource(environment).getScheduledArrival());
  }

  @Override
  public DataFetcher realtimeArrival() {
    return environment -> missingValueToNull(getSource(environment).getRealtimeArrival());
  }

  @Override
  public DataFetcher arrivalDelay() {
    return environment -> missingValueToNull(getSource(environment).getArrivalDelay());
  }

  @Override
  public DataFetcher scheduledDeparture() {
    return environment -> missingValueToNull(getSource(environment).getScheduledDeparture());
  }

  @Override
  public DataFetcher realtimeDeparture() {
    return environment -> missingValueToNull(getSource(environment).getRealtimeDeparture());
  }

  @Override
  public DataFetcher departureDelay() {
    return environment -> getSource(environment).getDepartureDelay();
  }

  @Override
  public DataFetcher timepoint() {
    return environment -> getSource(environment).isTimepoint();
  }

  @Override
  public DataFetcher realtime() {
    return environment -> getSource(environment).isRealtime();
  }

  @Override
  public DataFetcher realtimeState() {
    return environment -> getSource(environment).getRealtimeState().name();
  }

  @Override
  public DataFetcher pickupType() {
    return environment -> {
      switch (getSource(environment).getPickupType().getGtfsCode()) {
        case 0: return "SCHEDULED";
        case 1: return "NONE";
        case 2: return "CALL_AGENCY";
        case 3: return "COORDINATE_WITH_DRIVER";
        default: return null;
      }
    };
  }

  @Override
  public DataFetcher dropoffType() {
    return environment -> {
      switch (getSource(environment).getDropoffType().getGtfsCode()) {
        case 0: return "SCHEDULED";
        case 1: return "NONE";
        case 2: return "CALL_AGENCY";
        case 3: return "COORDINATE_WITH_DRIVER";
        default: return null;
      }
    };
  }

  @Override
  public DataFetcher serviceDay() {
    return environment -> getSource(environment).getServiceDay();
  }

  @Override
  public DataFetcher trip() {
    return environment -> getSource(environment).getTrip();
  }

  @Override
  public DataFetcher headsign() {
    return environment -> getSource(environment).getHeadsign();
  }

  private RoutingService getRoutingService(DataFetchingEnvironment environment) {
    return environment.getContext().getRoutingService();
  }

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

  /**
   * Generally the missing values are removed during the graph build. However, for flex
   * trips they are not and have to be converted to null here.
   */
  private Integer missingValueToNull(int value) {
      if(value == StopTime.MISSING_VALUE) {
        return null;
      }
      else {
        return value;
      }
  }
}