diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 03c705e..31a146c 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -1452,8 +1452,9 @@ public int getStopId(@NotNull GStop gStop) { //noinspection DiscouragedApi final String stopIdS = useStopCodeForStopId() ? stopCode - : useStopCodeForStopIdDigitsOnly() && CharUtils.isDigitsOnly(stopCode, true) ? stopCode - : gStopId; + : Configs.getRouteConfig().getUseStopCodeForStopIdIfAvailable() && !stopCode.isBlank() ? stopCode + : useStopCodeForStopIdDigitsOnly() && CharUtils.isDigitsOnly(stopCode, true) ? stopCode + : gStopId; if (stopIdS.isBlank() || !CharUtils.isDigitsOnly(stopIdS)) { Integer stopIdSInt = convertStopIdNotSupported(stopIdS); if (stopIdSInt != null) return stopIdSInt; @@ -1466,7 +1467,15 @@ public int getStopId(@NotNull GStop gStop) { this::convertStopIdPreviousChars ); } - return Integer.parseInt(stopIdS); + try { + return Integer.parseInt(stopIdS); + } catch (NumberFormatException nfe) { + Integer stopIdSInt = convertStopIdNotSupported(stopIdS); + if (stopIdSInt != null) return stopIdSInt; + stopIdSInt = Configs.getRouteConfig().convertStopIdFromOriginalNotSupported(gStopId); + if (stopIdSInt != null) return stopIdSInt; + throw nfe; + } } catch (Exception e) { throw new MTLog.Fatal(e, "Error while extracting stop ID from %s!", gStop.toStringPlus(true)); } diff --git a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt index 6fbb04f..4359957 100644 --- a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt +++ b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt @@ -119,6 +119,8 @@ data class RouteConfig( val stopIdNotUniqueAllowed: Boolean = false, // OPT-IN feature @SerialName("use_stop_code_for_stop_id") val useStopCodeForStopId: Boolean = false, // OPT-IN feature + @SerialName("use_stop_code_for_stop_id_if_available") + val useStopCodeForStopIdIfAvailable: Boolean = false, // OPT-IN feature @SerialName("use_stop_code_for_stop_id_digits_only") @get:Discouraged("only for backward compat w/ old Java config") val useStopCodeForStopIdDigitsOnly: Boolean = false, // OPT-IN feature