diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 804f297..58390e8 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -344,6 +344,9 @@ public Integer getAgencyExtendedRouteType() { @NotNull @Override public Integer getOriginalAgencyRouteType() { + if (Configs.getAgencyConfig() != null) { + return Configs.getAgencyConfig().getOriginalRouteTypeId(); + } return getAgencyRouteType(); } @@ -575,9 +578,9 @@ public String cleanRouteShortName(@NotNull String routeShortName) { @Override public String provideMissingRouteShortName(@NotNull GRoute gRoute) { //noinspection DiscouragedApi - final String routeShortNameFromRouteId = Configs.getRouteConfig().getRouteShortNameFromRouteId(gRoute.getRouteId()); - if (routeShortNameFromRouteId != null) { - return routeShortNameFromRouteId; + final String routeShortNameFromRoute = Configs.getRouteConfig().getRouteShortNameForRoute(gRoute); + if (routeShortNameFromRoute != null) { + return routeShortNameFromRoute; } if (Configs.getRouteConfig().getUseRouteLongNameForMissingRouteShortName()) { return gRoute.getRouteLongNameOrDefault(); diff --git a/src/main/java/org/mtransit/parser/config/gtfs/data/AgencyConfig.kt b/src/main/java/org/mtransit/parser/config/gtfs/data/AgencyConfig.kt index d0e62fd..a3423d9 100644 --- a/src/main/java/org/mtransit/parser/config/gtfs/data/AgencyConfig.kt +++ b/src/main/java/org/mtransit/parser/config/gtfs/data/AgencyConfig.kt @@ -22,6 +22,8 @@ data class AgencyConfig( */ @SerialName("target_route_type_id") val targetRouteTypeId: Int, // REQUIRED + @SerialName("original_route_type_id") + val originalRouteTypeId: Int = targetRouteTypeId, // REQUIRED (default to target route type ID) @SerialName("extended_target_route_type_id") val extendedTargetRouteTypeId: Int? = null, // OPTIONAL // STRINGS 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 69de184..8f7dbd3 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 @@ -40,8 +40,11 @@ data class RouteConfig( val useRouteLongNameForRouteShortName: Boolean = false, // OPT-IN feature @SerialName("use_route_long_name_for_missing_route_short_name") val useRouteLongNameForMissingRouteShortName: Boolean = false, // OPT-IN feature + @Deprecated("use routeToRouteShortNameConfigs instead") @SerialName("route_id_to_route_short_name_configs") - val routeIdToRouteShortNameConfigs: List = emptyList(), + val routeIdToRouteShortNameConfigs: List = emptyList(), + @SerialName("route_to_short_name_configs") + val routeToRouteShortNameConfigs: List = routeIdToRouteShortNameConfigs, @SerialName("route_short_name_cleaners") val routeShortNameCleaners: List = emptyList(), // long-name @@ -162,12 +165,20 @@ data class RouteConfig( ) @Serializable - data class RouteIdToRouteShortNameConfig( + data class RouteDefToShortNameConfig( @SerialName("route_id") - val routeId: String, + val routeId: String? = null, + @SerialName("route_long_name") + val routeLongName: String? = null, @SerialName("route_short_name") val routeShortName: String, - ) + ) { + init { + require(routeId != null || routeLongName != null) { + "Either 'route_id' or 'route_long_name' must be provided in RouteDefToShortNameConfig." + } + } + } @Serializable data class RouteColor( @@ -175,6 +186,8 @@ data class RouteConfig( val routeId: String? = null, @SerialName("route_short_name") val routeShortName: String?, + @SerialName("route_long_name") + val routeLongName: String? = null, @SerialName("color") val color: String, @SerialName("override") @@ -251,19 +264,21 @@ data class RouteConfig( this.routeIdPreviousCharConfigs .singleOrNull { it.char == previousChars }?.idPart - fun getRouteShortNameFromRouteId(routeId: String) = - this.routeIdToRouteShortNameConfigs - .singleOrNull { it.routeId == routeId }?.routeShortName + fun getRouteShortNameForRoute(gRoute: GRoute) = + //noinspection DiscouragedApi + (this.routeToRouteShortNameConfigs.singleOrNull { gRoute.routeId == it.routeId } + ?: this.routeToRouteShortNameConfigs.singleOrNull { gRoute.routeLongNameOrDefault == it.routeLongName }) + ?.routeShortName @JvmOverloads - fun getRouteColor(gRoute: GRoute, defaultColor: String? = gRoute.routeColor, override: Boolean = false): String? { + fun getRouteColor(gRoute: GRoute, defaultColor: String? = gRoute.routeColor, override: Boolean = false) = //noinspection DiscouragedApi - return (this.routeColors.singleOrNull { gRoute.routeId == it.routeId } - ?: this.routeColors.singleOrNull { gRoute.routeShortName == it.routeShortName }) + (this.routeColors.singleOrNull { gRoute.routeId == it.routeId } + ?: this.routeColors.singleOrNull { gRoute.routeShortName == it.routeShortName } + ?: this.routeColors.singleOrNull { gRoute.routeLongNameOrDefault == it.routeLongName }) ?.takeIf { it.override || !override } ?.color ?: defaultColor - } fun isRouteColorIgnored(routeColor: String) = this.routeColorsIgnored.any { it.equals(routeColor, ignoreCase = true) }