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

org.opentripplanner.updater.trip.gtfs.AddedStopTime Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.updater.trip.gtfs;

import com.google.transit.realtime.GtfsRealtime;
import de.mfdz.MfdzRealtimeExtensions;
import java.util.Objects;
import javax.annotation.Nullable;
import org.opentripplanner.gtfs.mapping.PickDropMapper;
import org.opentripplanner.model.PickDrop;

/**
 * This class purely exists to encapsulate the logic for extracting conversion of the GTFS-RT
 * updates into a separate place.
 */
final class AddedStopTime {

  @Nullable
  private final PickDrop pickup;

  @Nullable
  private final PickDrop dropOff;

  public static final PickDrop DEFAULT_PICK_DROP = PickDrop.SCHEDULED;

  AddedStopTime(@Nullable PickDrop pickup, @Nullable PickDrop dropOff) {
    this.pickup = pickup;
    this.dropOff = dropOff;
  }

  PickDrop pickup() {
    return Objects.requireNonNullElse(pickup, DEFAULT_PICK_DROP);
  }

  PickDrop dropOff() {
    return Objects.requireNonNullElse(dropOff, DEFAULT_PICK_DROP);
  }

  static AddedStopTime ofStopTime(GtfsRealtime.TripUpdate.StopTimeUpdate props) {
    if (props.getStopTimeProperties().hasExtension(MfdzRealtimeExtensions.stopTimeProperties)) {
      var ext = props
        .getStopTimeProperties()
        .getExtension(MfdzRealtimeExtensions.stopTimeProperties);
      var pickup = ext.getPickupType();
      var dropOff = ext.getDropoffType();
      var dropOffType = PickDropMapper.map(dropOff.getNumber());
      var pickupType = PickDropMapper.map(pickup.getNumber());
      return new AddedStopTime(pickupType, dropOffType);
    } else {
      var pickDrop = toPickDrop(props.getScheduleRelationship());
      return new AddedStopTime(pickDrop, pickDrop);
    }
  }

  private static PickDrop toPickDrop(
    GtfsRealtime.TripUpdate.StopTimeUpdate.ScheduleRelationship scheduleRelationship
  ) {
    return switch (scheduleRelationship) {
      case SCHEDULED, NO_DATA, UNSCHEDULED -> PickDrop.SCHEDULED;
      case SKIPPED -> PickDrop.CANCELLED;
    };
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy