From c03fe78c788b587f11ed40a75db2500605b4a957 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 1 Aug 2012 01:24:40 +0200 Subject: [PATCH] support 'h2g-direct' binary format for hafas connections --- .../schildbach/pte/AbstractHafasProvider.java | 631 +++++++++++++++++- .../src/de/schildbach/pte/dto/Location.java | 14 + .../pte/util/LittleEndianDataInputStream.java | 43 ++ .../de/schildbach/pte/util/ParserUtils.java | 68 +- 4 files changed, 748 insertions(+), 8 deletions(-) create mode 100644 enabler/src/de/schildbach/pte/util/LittleEndianDataInputStream.java diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 935efbf5..c8f48d3c 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -17,11 +17,15 @@ package de.schildbach.pte; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; @@ -57,6 +61,8 @@ import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.ResultHeader; import de.schildbach.pte.dto.StationDepartures; import de.schildbach.pte.dto.Stop; +import de.schildbach.pte.exception.SessionExpiredException; +import de.schildbach.pte.util.LittleEndianDataInputStream; import de.schildbach.pte.util.ParserUtils; import de.schildbach.pte.util.StringReplaceReader; import de.schildbach.pte.util.XmlPullUtil; @@ -100,6 +106,30 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider } } + public static class QueryConnectionsBinaryContext implements QueryConnectionsContext + { + public final String ident; + public final short seqNr; + public final String ld; + + public QueryConnectionsBinaryContext(final String ident, final short seqNr, final String ld) + { + this.ident = ident; + this.seqNr = seqNr; + this.ld = ld; + } + + public boolean canQueryLater() + { + return true; + } + + public boolean canQueryEarlier() + { + return true; + } + } + public AbstractHafasProvider(final String apiUri, final int numProductBits, final String accessId, final Charset jsonEncoding, final Charset xmlMlcResEncoding) { @@ -811,7 +841,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider { final ResultHeader header = new ResultHeader(SERVER_PRODUCT); - if (from.type == LocationType.ANY || (from.type == LocationType.ADDRESS && !from.hasLocation())) + if (!from.isIdentified()) { final List autocompletes = autocompleteStations(from.name); if (autocompletes.isEmpty()) @@ -821,7 +851,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider from = autocompletes.get(0); } - if (via != null && (via.type == LocationType.ANY || (via.type == LocationType.ADDRESS && !via.hasLocation()))) + if (via != null && !via.isIdentified()) { final List autocompletes = autocompleteStations(via.name); if (autocompletes.isEmpty()) @@ -831,7 +861,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider via = autocompletes.get(0); } - if (to.type == LocationType.ANY || (to.type == LocationType.ADDRESS && !to.hasLocation())) + if (!to.isIdentified()) { final List autocompletes = autocompleteStations(to.name); if (autocompletes.isEmpty()) @@ -1394,6 +1424,601 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider return true; } + protected void appendCustomConnectionsQueryBinaryUri(final StringBuilder uri) + { + } + + protected final QueryConnectionsResult queryConnectionsBinary(Location from, Location via, Location to, final Date date, final boolean dep, + final int maxNumConnections, final String products, final WalkSpeed walkSpeed, final Accessibility accessibility, + final Set