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

org.opentripplanner.netex.mapping.TransportModeMapper Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.netex.mapping;

import org.opentripplanner.netex.mapping.support.NetexMainAndSubMode;
import org.opentripplanner.transit.model.basic.TransitMode;
import org.rutebanken.netex.model.AllVehicleModesOfTransportEnumeration;
import org.rutebanken.netex.model.TransportSubmodeStructure;

/**
 * This is a best-effort at mapping the NeTEx transport modes to the OTP route codes which are
 * identical to the
 * GTFS extended
 * route types
 */
class TransportModeMapper {

  public NetexMainAndSubMode map(
    AllVehicleModesOfTransportEnumeration netexMode,
    TransportSubmodeStructure submode
  ) throws UnsupportedModeException {
    if (submode == null) {
      return new NetexMainAndSubMode(mapAllVehicleModesOfTransport(netexMode));
    } else {
      return getSubmodeAsString(submode);
    }
  }

  public TransitMode mapAllVehicleModesOfTransport(AllVehicleModesOfTransportEnumeration mode)
    throws UnsupportedModeException {
    if (mode == null) {
      throw new UnsupportedModeException(null);
    }
    return switch (mode) {
      case AIR -> TransitMode.AIRPLANE;
      case BUS -> TransitMode.BUS;
      case CABLEWAY -> TransitMode.GONDOLA;
      case COACH -> TransitMode.COACH;
      case FUNICULAR -> TransitMode.FUNICULAR;
      case METRO -> TransitMode.SUBWAY;
      case RAIL -> TransitMode.RAIL;
      case TAXI -> TransitMode.TAXI;
      case TRAM -> TransitMode.TRAM;
      case WATER -> TransitMode.FERRY;
      default -> throw new UnsupportedModeException(mode);
    };
  }

  private NetexMainAndSubMode getSubmodeAsString(TransportSubmodeStructure submode) {
    if (submode.getAirSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.AIRPLANE, submode.getAirSubmode().value());
    } else if (submode.getBusSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.BUS, submode.getBusSubmode().value());
    } else if (submode.getTelecabinSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.GONDOLA, submode.getTelecabinSubmode().value());
    } else if (submode.getCoachSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.COACH, submode.getCoachSubmode().value());
    } else if (submode.getFunicularSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.FUNICULAR, submode.getFunicularSubmode().value());
    } else if (submode.getMetroSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.SUBWAY, submode.getMetroSubmode().value());
    } else if (submode.getRailSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.RAIL, submode.getRailSubmode().value());
    } else if (submode.getTramSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.TRAM, submode.getTramSubmode().value());
    } else if (submode.getWaterSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.FERRY, submode.getWaterSubmode().value());
    } else if (submode.getTaxiSubmode() != null) {
      return new NetexMainAndSubMode(TransitMode.TAXI, submode.getTaxiSubmode().value());
    }
    throw new IllegalArgumentException();
  }

  static class UnsupportedModeException extends Exception {

    final AllVehicleModesOfTransportEnumeration mode;

    public UnsupportedModeException(AllVehicleModesOfTransportEnumeration mode) {
      this.mode = mode;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy