diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 38c3741..e1c6120 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -811,18 +811,33 @@ public boolean removeRouteLongNameFromDirectionHeadsign() { return Configs.getRouteConfig().getDirectionHeadsignRemoveRouteLongName(); } + @Override + public boolean removeRouteShortNameFromDirectionHeadsign() { + return Configs.getRouteConfig().getDirectionHeadsignRemoveRouteShortName(); + } + + @Override + public boolean removeRouteDescFromDirectionHeadsign() { + return Configs.getRouteConfig().getDirectionHeadsignRemoveRouteDesc(); + } + /** * @param directionId {@link org.mtransit.parser.gtfs.data.GDirectionId} (0 or 1 or missing/generated) */ @Override public @NotNull String cleanDirectionHeadsign(@Nullable GRoute gRoute, int directionId, boolean fromStopName, @NotNull String directionHeadSign) { - if (gRoute != null && removeRouteLongNameFromDirectionHeadsign() - && directionHeadSign.equals(gRoute.getRouteLongNameOrDefault())) { - //noinspection deprecation - return cleanDirectionHeadsign(directionId, fromStopName, ""); + if (gRoute != null) { + if (removeRouteLongNameFromDirectionHeadsign() && directionHeadSign.equals(gRoute.getRouteLongNameOrDefault())) { + directionHeadSign = ""; + } else if (removeRouteShortNameFromDirectionHeadsign() && directionHeadSign.equals(gRoute.getRouteShortName())) { + directionHeadSign = ""; + } else if (removeRouteDescFromDirectionHeadsign() && directionHeadSign.equals(gRoute.getRouteDescOrDefault())) { + directionHeadSign = ""; + } } //noinspection deprecation - return cleanDirectionHeadsign(directionId, fromStopName, directionHeadSign); + directionHeadSign = cleanDirectionHeadsign(directionId, fromStopName, directionHeadSign); + return directionHeadSign; } @SuppressWarnings("DeprecatedIsStillUsed") @@ -840,7 +855,8 @@ public String cleanDirectionHeadsign(int directionId, boolean fromStopName, @Not @NotNull @Override public String cleanDirectionHeadsign(boolean fromStopName, @NotNull String directionHeadSign) { - return cleanTripHeadsign(directionHeadSign); + directionHeadSign = cleanTripHeadsign(directionHeadSign); + return directionHeadSign; } @Override @@ -914,6 +930,9 @@ public int getDirectionType() { @NotNull @Override public List getDirectionTypes() { + if (!Configs.getRouteConfig().getDirectionTypes().isEmpty()) { + return Configs.getRouteConfig().getDirectionTypes(); + } //noinspection deprecation final int deprecatedDirectionType = getDirectionType(); if (deprecatedDirectionType != -1 @@ -1164,9 +1183,18 @@ public String cleanStopHeadSign(@NotNull String stopHeadsign) { return cleanTripHeadsign(cleanStopHeadsign); } + @Override + public @Nullable String getStopCodePrependIfMissing() { + return Configs.getRouteConfig().getStopCodePrependIfMissing(); + } + @NotNull @Override public String getStopCode(@NotNull GStop gStop) { + final String prepend = getStopCodePrependIfMissing(); + if (prepend != null && !gStop.getStopCode().startsWith(prepend)) { + return prepend + gStop.getStopCode(); + } return gStop.getStopCode(); } 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 afd6478..926855e 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 @@ -54,10 +54,16 @@ data class RouteConfig( @SerialName("trip_id_clean_merged") val tripIdCleanMerged: Boolean = false, // OPT-IN feature // DIRECTION + @SerialName("direction_types") + val directionTypes: List = emptyList(), @SerialName("direction_headsign_cleaners") val directionHeadsignCleaners: List = emptyList(), @SerialName("direction_headsign_remove_route_long_name") val directionHeadsignRemoveRouteLongName: Boolean = false, // OPT-IN feature + @SerialName("direction_headsign_remove_route_short_name") + val directionHeadsignRemoveRouteShortName: Boolean = false, // OPT-IN feature + @SerialName("direction_headsign_remove_route_desc") + val directionHeadsignRemoveRouteDesc: Boolean = false, // OPT-IN feature @SerialName("direction_splitter_enabled") val directionSplitterEnabled: Boolean = false, // OPT-IN feature @SerialName("direction_finder_enabled") @@ -73,6 +79,8 @@ data class RouteConfig( val useStopCodeForStopId: Boolean = false, // OPT-IN feature @SerialName("stop_code_to_stop_id_configs") val stopCodeToStopIdConfigs: List = emptyList(), + @SerialName("stop_code_prepend_if_missing") + val stopCodePrependIfMissing: String? = null, // optional @SerialName("stop_headsign_remove_trip_headsign") val stopHeadsignRemoveTripHeadsign: Boolean = false, // OPT-IN feature @SerialName("stop_headsign_remove_route_long_name") diff --git a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java index 92bbac0..334b15a 100644 --- a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java +++ b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java @@ -197,6 +197,10 @@ public interface GAgencyTools { boolean removeRouteLongNameFromDirectionHeadsign(); + boolean removeRouteShortNameFromDirectionHeadsign(); + + boolean removeRouteDescFromDirectionHeadsign(); + @NotNull String cleanDirectionHeadsign(@Nullable GRoute gRoute, int directionId, boolean fromStopName, @NotNull String directionHeadSign); @@ -301,6 +305,8 @@ public interface GAgencyTools { @NotNull String cleanStopHeadSign(@NotNull String stopHeadsign); + @Nullable String getStopCodePrependIfMissing(); + @NotNull String getStopCode(@NotNull GStop gStop);