diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index 4c491135..ae78bac5 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -356,11 +356,30 @@ public boolean excludeAgencyNullable(@Nullable GAgency gAgency) { @Override public boolean excludeAgency(@NotNull GAgency gAgency) { + 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 (getAgencyId() != null && gAgency.isDifferentAgency(getAgencyId())) { - return EXCLUDE; + if (hasAgencyId && !gAgency.isDifferentAgency(agencyId)) { + return KEEP; } - return KEEP; + if (hasOtherAgencyIds) { + for (final String otherAgencyId : otherAgencyIds) { + //noinspection DiscouragedApi + if (!gAgency.isDifferentAgency(otherAgencyId)) { + 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)