diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index e1c6120..3aa15ae 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -118,6 +118,7 @@ public class DefaultAgencyTools implements GAgencyTools { private static final Integer OVERRIDE_DATE; static { + //noinspection SpellCheckingInspection OVERRIDE_DATE = null; // yyyyMMdd } @@ -466,13 +467,13 @@ public Long convertRouteIdFromShortNameNotSupported(@NotNull String routeShortNa @Nullable @Override public Long convertRouteIdNextChars(@NotNull String nextChars) { - return null; + return Configs.getRouteConfig().convertRouteIdNextChars(nextChars); } @Nullable @Override public Long convertRouteIdPreviousChars(@NotNull String previousChars) { - return null; + return Configs.getRouteConfig().convertRouteIdPreviousChars(previousChars); } @Override @@ -568,10 +569,19 @@ public boolean tryRouteDescForMissingLongName() { return false; // OPT-IN feature } + @Override + public boolean removeRouteIdFromRouteLongName() { + return Configs.getRouteConfig().getRouteLongNameRemoveRouteId(); + } + @NotNull @Override public String getRouteLongName(@NotNull GRoute gRoute) { String routeLongName = gRoute.getRouteLongNameOrDefault(); + //noinspection DiscouragedApi + if (removeRouteIdFromRouteLongName() && routeLongName.equals(gRoute.getRouteId())) { + routeLongName = ""; + } if (tryRouteDescForMissingLongName() && org.mtransit.commons.StringUtils.isEmpty(routeLongName)) { routeLongName = gRoute.getRouteDescOrDefault(); @@ -1205,13 +1215,22 @@ public String getStopOriginalId(@NotNull GStop gStop) { return null; // only if not stop code or stop ID } + @Override + public boolean useStopIdHashCode() { + return Configs.getRouteConfig().getUseStopIdHashCode(); + } + @Override public int getStopId(@NotNull GStop gStop) { try { //noinspection DiscouragedApi + final String gStopId = gStop.getStopId(); + if (useStopIdHashCode()) { + return Math.abs(gStopId.hashCode()); + } final String stopIdS = useStopCodeForStopId() ? cleanStopOriginalId(getStopCode(gStop)) - : gStop.getStopId(); + : gStopId; if (!CharUtils.isDigitsOnly(stopIdS)) { final Integer stopIdSInt = convertStopIdFromCodeNotSupported(stopIdS); if (stopIdSInt != null) { 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 926855e..59c250a 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 @@ -23,6 +23,10 @@ data class RouteConfig( val useRouteIdForRouteShortName: Boolean = false, // OPT-IN feature @SerialName("route_short_name_to_route_id_configs") val routeShortNameToRouteIdConfigs: List = emptyList(), + @SerialName("route_id_next_char_configs") + val routeIdNextCharConfigs: List = emptyList(), + @SerialName("route_id_previous_char_configs") + val routeIdPreviousCharConfigs: List = emptyList(), // short-name @SerialName("use_route_long_name_for_missing_route_short_name") val useRouteLongNameForMissingRouteShortName: Boolean = false, // OPT-IN feature @@ -35,6 +39,8 @@ data class RouteConfig( val defaultRouteLongNameEnabled: Boolean = false, // OPT-IN feature @SerialName("route_long_name_cleaners") val routeLongNameCleaners: List = emptyList(), + @SerialName("route_long_name_remove_route_id") + val routeLongNameRemoveRouteId: Boolean = false, // OPT-IN feature // colors @SerialName("route_colors") val routeColors: List = emptyList(), @@ -81,6 +87,8 @@ data class RouteConfig( val stopCodeToStopIdConfigs: List = emptyList(), @SerialName("stop_code_prepend_if_missing") val stopCodePrependIfMissing: String? = null, // optional + @SerialName("use_stop_id_hash_code") + val useStopIdHashCode: Boolean = false, // OPT-IN feature @SerialName("stop_headsign_remove_trip_headsign") val stopHeadsignRemoveTripHeadsign: Boolean = false, // OPT-IN feature @SerialName("stop_headsign_remove_route_long_name") @@ -102,6 +110,14 @@ data class RouteConfig( val routeId: Long, ) + @Serializable + data class RouteIdCharToRouteIdPartConfig( + @SerialName("char") + val char: String, + @SerialName("route_id_part") + val routeIdPart: Long, + ) + @Serializable data class RouteIdToRouteShortNameConfig( @SerialName("route_id") @@ -154,6 +170,14 @@ data class RouteConfig( this.routeShortNameToRouteIdConfigs .singleOrNull { it.routeShortName == routeShortName }?.routeId + fun convertRouteIdNextChars(nextChars: String) = + this.routeIdNextCharConfigs + .singleOrNull { it.char == nextChars }?.routeIdPart + + fun convertRouteIdPreviousChars(previousChars: String) = + this.routeIdPreviousCharConfigs + .singleOrNull { it.char == previousChars }?.routeIdPart + fun getRouteShortNameFromRouteId(routeId: String) = this.routeIdToRouteShortNameConfigs .singleOrNull { it.routeId == routeId }?.routeShortName diff --git a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java index 334b15a..05a7931 100644 --- a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java +++ b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java @@ -141,6 +141,8 @@ public interface GAgencyTools { boolean tryRouteDescForMissingLongName(); + boolean removeRouteIdFromRouteLongName(); + @NotNull String getRouteLongName(@NotNull GRoute gRoute); @@ -277,6 +279,8 @@ public interface GAgencyTools { boolean excludeStopTime(@NotNull GStopTime gStopTime); + boolean useStopIdHashCode(); + // STOP int getStopId(@NotNull GStop gStop);