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

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

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

import java.util.Collection;
import javax.annotation.Nullable;
import org.opentripplanner.framework.i18n.NonLocalizedString;
import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore;
import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory;
import org.opentripplanner.netex.mapping.support.NetexMainAndSubMode;
import org.opentripplanner.transit.model.basic.Accessibility;
import org.opentripplanner.transit.model.framework.FeedScopedId;
import org.opentripplanner.transit.model.site.FareZone;
import org.opentripplanner.transit.model.site.RegularStop;
import org.opentripplanner.transit.model.site.Station;
import org.opentripplanner.transit.service.SiteRepositoryBuilder;
import org.rutebanken.netex.model.MultilingualString;
import org.rutebanken.netex.model.Quay;

class QuayMapper {

  private final DataImportIssueStore issueStore;

  private final FeedScopedIdFactory idFactory;

  private final SiteRepositoryBuilder siteRepositoryBuilder;

  QuayMapper(
    FeedScopedIdFactory idFactory,
    DataImportIssueStore issueStore,
    SiteRepositoryBuilder siteRepositoryBuilder
  ) {
    this.idFactory = idFactory;
    this.issueStore = issueStore;
    this.siteRepositoryBuilder = siteRepositoryBuilder;
  }

  /**
   * Map Netex Quay to OTP Stop
   */
  @Nullable
  RegularStop mapQuayToStop(
    Quay quay,
    Station parentStation,
    Collection fareZones,
    NetexMainAndSubMode transitMode,
    Accessibility wheelchair
  ) {
    var id = idFactory.createId(quay.getId());
    return siteRepositoryBuilder.computeRegularStopIfAbsent(id, it ->
      map(it, quay, parentStation, fareZones, transitMode, wheelchair)
    );
  }

  private RegularStop map(
    FeedScopedId id,
    Quay quay,
    Station parentStation,
    Collection fareZones,
    NetexMainAndSubMode transitMode,
    Accessibility wheelchair
  ) {
    var coordinate = WgsCoordinateMapper.mapToDomain(quay.getCentroid());

    if (coordinate == null) {
      issueStore.add(
        "QuayWithoutCoordinates",
        "Quay %s does not contain any coordinates.",
        quay.getId()
      );
      return null;
    }

    var builder = siteRepositoryBuilder
      .regularStop(id)
      .withParentStation(parentStation)
      .withName(parentStation.getName())
      .withPlatformCode(quay.getPublicCode())
      .withDescription(
        NonLocalizedString.ofNullable(quay.getDescription(), MultilingualString::getValue)
      )
      .withCoordinate(WgsCoordinateMapper.mapToDomain(quay.getCentroid()))
      .withWheelchairAccessibility(wheelchair)
      .withVehicleType(transitMode.mainMode())
      .withNetexVehicleSubmode(transitMode.subMode());

    builder.fareZones().addAll(fareZones);

    return builder.build();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy