From c410dbca5568883d8c7a5753ec5ea16d68f10971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 26 Mar 2026 19:46:44 -0400 Subject: [PATCH 1/2] JSON config > + `other_agency_ids` --- .../mtransit/parser/DefaultAgencyTools.java | 19 ++++++++++++++++--- .../parser/config/gtfs/data/AgencyConfig.kt | 5 +++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 4c491135..09a552cf 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -356,11 +356,24 @@ public boolean excludeAgencyNullable(@Nullable GAgency gAgency) { @Override public boolean excludeAgency(@NotNull GAgency gAgency) { + final List otherAgencyIds = Configs.getAgencyConfig() == null ? null : Configs.getAgencyConfig().getOtherAgencyIds(); + if (otherAgencyIds != null) { + for (final String otherAgencyId : otherAgencyIds) { + //noinspection DiscouragedApi + if (!gAgency.isDifferentAgency(otherAgencyId)) { + return KEEP; + } + } + } + final String agencyId = getAgencyId(); + if (agencyId == null) { + return KEEP; + } //noinspection DiscouragedApi - if (getAgencyId() != null && gAgency.isDifferentAgency(getAgencyId())) { - return EXCLUDE; + if (!gAgency.isDifferentAgency(agencyId)) { + return KEEP; } - return KEEP; + return EXCLUDE; } private final Map serviceIdToCleanupServiceId = new HashMap<>(); 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 5ff10ec9..d0e62fd2 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 @@ -10,6 +10,11 @@ data class AgencyConfig( */ @SerialName("agency_id") val agencyId: String? = null, // OPT-IN filter + /** + * (Optional) Agency IDs filter (useful when multiple agencies in same GTFS) + */ + @SerialName("other_agency_ids") + val otherAgencyIds: List = emptyList(), // OPT-IN filter /** * Route type filter (integer from GTFS Static `routes.txt` > `route_type` field) * (useful when multiple route type in same GTFS) From 6d2c788eb2a17c5f1b10c2f9f5c43a08b00e1650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Fri, 27 Mar 2026 08:25:43 -0400 Subject: [PATCH 2/2] PR comment --- .../mtransit/parser/DefaultAgencyTools.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 09a552cf..ae78bac5 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -356,8 +356,22 @@ public boolean excludeAgencyNullable(@Nullable GAgency gAgency) { @Override public boolean excludeAgency(@NotNull GAgency gAgency) { - final List otherAgencyIds = Configs.getAgencyConfig() == null ? null : Configs.getAgencyConfig().getOtherAgencyIds(); - if (otherAgencyIds != null) { + final org.mtransit.parser.config.gtfs.data.AgencyConfig agencyConfig = Configs.getAgencyConfig(); + if (agencyConfig == null) { + return KEEP; + } + final String agencyId = agencyConfig.getAgencyId(); + final List otherAgencyIds = agencyConfig.getOtherAgencyIds(); + final boolean hasAgencyId = agencyId != null; + final boolean hasOtherAgencyIds = !otherAgencyIds.isEmpty(); + if (!hasAgencyId && !hasOtherAgencyIds) { + return KEEP; // no filters + } + //noinspection DiscouragedApi + if (hasAgencyId && !gAgency.isDifferentAgency(agencyId)) { + return KEEP; + } + if (hasOtherAgencyIds) { for (final String otherAgencyId : otherAgencyIds) { //noinspection DiscouragedApi if (!gAgency.isDifferentAgency(otherAgencyId)) { @@ -365,14 +379,6 @@ public boolean excludeAgency(@NotNull GAgency gAgency) { } } } - final String agencyId = getAgencyId(); - if (agencyId == null) { - return KEEP; - } - //noinspection DiscouragedApi - if (!gAgency.isDifferentAgency(agencyId)) { - return KEEP; - } return EXCLUDE; }