Hafas: If binary connections query returns only one single individual leg, don't query for more.

This commit is contained in:
Andreas Schildbach 2014-12-15 17:00:09 +01:00
parent 9976995137
commit b596ba6f3a
2 changed files with 34 additions and 4 deletions

View file

@ -128,23 +128,25 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
public final int seqNr; public final int seqNr;
public final String ld; public final String ld;
public final int usedBufferSize; 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.ident = ident;
this.seqNr = seqNr; this.seqNr = seqNr;
this.ld = ld; this.ld = ld;
this.usedBufferSize = usedBufferSize; this.usedBufferSize = usedBufferSize;
this.canQueryMore = canQueryMore;
} }
public boolean canQueryLater() public boolean canQueryLater()
{ {
return true; return canQueryMore;
} }
public boolean canQueryEarlier() public boolean canQueryEarlier()
{ {
return true; return canQueryMore;
} }
} }
@ -2008,8 +2010,12 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
trips.add(trip); 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, final QueryTripsResult result = new QueryTripsResult(header, uri, from, via, to, new QueryTripsBinaryContext(requestId, seqNr, ld,
bis.getCount()), trips); bis.getCount(), canQueryMore), trips);
return result; return result;
} }

View file

@ -143,6 +143,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest
"Kernbeisserweg 4"), null, new Location(LocationType.ADDRESS, null, 52433989, 13474353, "12357 Berlin-Buckow", "Distelfinkweg 35"), "Kernbeisserweg 4"), null, new Location(LocationType.ADDRESS, null, 52433989, 13474353, "12357 Berlin-Buckow", "Distelfinkweg 35"),
new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); print(laterResult);
} }
@ -154,6 +158,10 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest
LocationType.STATION, "9044202", "Berlin", "Bundesplatz"), new Location(LocationType.STATION, "9013103", "Berlin", "Prinzenstraße"), LocationType.STATION, "9044202", "Berlin", "Bundesplatz"), new Location(LocationType.STATION, "9013103", "Berlin", "Prinzenstraße"),
new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL); new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); 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( 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); LocationType.ADDRESS, null, 52513639, 13568648, null, null), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); 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, new Location(LocationType.ADDRESS, null, 52513639, 13568648, null, null), new Date(), true, Product.ALL, WalkSpeed.NORMAL,
Accessibility.NEUTRAL); Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); 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", "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); "Göhrener Str. 5"), new Date(), true, Product.ALL, WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); 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, new Location(LocationType.ADDRESS, null, 52526029, 13399878, "10178 Berlin-Mitte", "Sophienstr. 24"), new Date(), true, Product.ALL,
WalkSpeed.NORMAL, Accessibility.NEUTRAL); WalkSpeed.NORMAL, Accessibility.NEUTRAL);
print(result); print(result);
if (!result.context.canQueryLater())
return;
final QueryTripsResult laterResult = queryMoreTrips(result.context, true); final QueryTripsResult laterResult = queryMoreTrips(result.context, true);
print(laterResult); print(laterResult);
} }