From b596ba6f3a8a610c0d0851c0cde89e3f19227cd8 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 15 Dec 2014 17:00:09 +0100 Subject: [PATCH] Hafas: If binary connections query returns only one single individual leg, don't query for more. --- .../schildbach/pte/AbstractHafasProvider.java | 14 +++++++---- .../pte/live/VbbProviderLiveTest.java | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 87741efe..a197cd58 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -128,23 +128,25 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider public final int seqNr; public final String ld; public final int usedBufferSize; + private final boolean canQueryMore; - public QueryTripsBinaryContext(final String ident, final int seqNr, final String ld, final int usedBufferSize) + public QueryTripsBinaryContext(final String ident, final int seqNr, final String ld, final int usedBufferSize, final boolean canQueryMore) { this.ident = ident; this.seqNr = seqNr; this.ld = ld; this.usedBufferSize = usedBufferSize; + this.canQueryMore = canQueryMore; } public boolean canQueryLater() { - return true; + return canQueryMore; } public boolean canQueryEarlier() { - return true; + return canQueryMore; } } @@ -2008,8 +2010,12 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider trips.add(trip); } + // if result is only one single individual leg, don't query for more + final boolean canQueryMore = trips.size() != 1 || trips.get(0).legs.size() != 1 + || !(trips.get(0).legs.get(0) instanceof Trip.Individual); + final QueryTripsResult result = new QueryTripsResult(header, uri, from, via, to, new QueryTripsBinaryContext(requestId, seqNr, ld, - bis.getCount()), trips); + bis.getCount(), canQueryMore), trips); return result; } diff --git a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java index d15ac6f8..6fb73265 100644 --- a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java @@ -143,6 +143,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest "Kernbeisserweg 4"), null, new Location(LocationType.ADDRESS, null, 52433989, 13474353, "12357 Berlin-Buckow", "Distelfinkweg 35"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @@ -154,6 +158,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest LocationType.STATION, "9044202", "Berlin", "Bundesplatz"), new Location(LocationType.STATION, "9013103", "Berlin", "Prinzenstraße"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @@ -164,6 +172,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest final QueryTripsResult result = queryTrips(new Location(LocationType.ADDRESS, null, 52501507, 13357026, null, null), null, new Location( LocationType.ADDRESS, null, 52513639, 13568648, null, null), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @@ -176,6 +188,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest new Location(LocationType.ADDRESS, null, 52513639, 13568648, null, null), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @@ -187,6 +203,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest "Weimarische Str. 7"), null, new Location(LocationType.ADDRESS, null, 52541536, 13421290, "10437 Berlin-Prenzlauer Berg", "Göhrener Str. 5"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); } @@ -199,6 +219,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest new Location(LocationType.ADDRESS, null, 52526029, 13399878, "10178 Berlin-Mitte", "Sophienstr. 24"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); print(result); + + if (!result.context.canQueryLater()) + return; + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); print(laterResult); }