From bae806d5cca3eb8fa032db82e3fa54a1aa17c287 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 1 Oct 2014 12:45:47 +0200 Subject: [PATCH] Handle case where no (further) trips can be found for binary trips (Hafas). --- .../schildbach/pte/AbstractHafasProvider.java | 44 +++++++++++-------- .../pte/live/VbbProviderLiveTest.java | 11 +++++ 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 120511eb..505161c5 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -1566,6 +1566,31 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider if (errorCode == 0) { + // string encoding + is.skipBytes(14); + final Charset stringEncoding = Charset.forName(strings.read(is)); + strings.setEncoding(stringEncoding); + + // read number of trips + is.reset(); + is.skipBytes(30); + + final int numTrips = is.readShortReverse(); + if (numTrips == 0) + return new QueryTripsResult(header, uri, from, via, to, null, new LinkedList()); + + // read rest of header + is.reset(); + is.skipBytes(0x02); + + final Location resDeparture = location(is, strings); + final Location resArrival = location(is, strings); + + is.skipBytes(10); + + final long resDate = date(is); + /* final long resDate30 = */date(is); + is.reset(); is.skipBytes(extensionHeaderPtr + 0x8); @@ -1585,10 +1610,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final int disruptionsPtr = is.readIntReverse(); - is.skipBytes(8); + is.skipBytes(10); - final Charset stringEncoding = Charset.forName(strings.read(is)); - strings.setEncoding(stringEncoding); final String ld = strings.read(is); final int attrsOffset = is.readIntReverse(); @@ -1626,21 +1649,6 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider // read comments final CommentTable comments = new CommentTable(is, commentTablePtr, tripDetailsPtr - commentTablePtr, strings); - // really read header - is.reset(); - is.skipBytes(0x02); - - final Location resDeparture = location(is, strings); - final Location resArrival = location(is, strings); - - final int numTrips = is.readShortReverse(); - - is.readInt(); - is.readInt(); - - final long resDate = date(is); - /* final long resDate30 = */date(is); - final List trips = new ArrayList(numTrips); // read trips diff --git a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java index 50a50eba..4937bc06 100644 --- a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java @@ -126,6 +126,17 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest print(earlierResult); } + @Test + public void shortFootwayTrip() throws Exception + { + final QueryTripsResult result = queryTrips(new Location(LocationType.ADDRESS, null, 52435193, 13473409, "12357 Berlin-Buckow", + "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); + final QueryTripsResult laterResult = queryMoreTrips(result.context, true); + print(laterResult); + } + @Test public void shortViaTrip() throws Exception {