From 82413fa953b8377795faa5847e01e2b8db02a96a Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Sun, 1 May 2011 12:56:01 +0000 Subject: [PATCH] autocomplete by ajax-getstop where possible git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@591 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- .../schildbach/pte/AbstractHafasProvider.java | 4 +++ src/de/schildbach/pte/SeptaProvider.java | 30 +++++++++++++------ src/de/schildbach/pte/SncbProvider.java | 13 ++++++++ src/de/schildbach/pte/VgsProvider.java | 12 ++++++-- .../pte/live/SeptaProviderLiveTest.java | 19 ++++++++++++ .../pte/live/VgsProviderLiveTest.java | 19 ++++++++++++ 6 files changed, 85 insertions(+), 12 deletions(-) diff --git a/src/de/schildbach/pte/AbstractHafasProvider.java b/src/de/schildbach/pte/AbstractHafasProvider.java index c08bc68b..1f41b37e 100644 --- a/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/src/de/schildbach/pte/AbstractHafasProvider.java @@ -244,6 +244,10 @@ public abstract class AbstractHafasProvider implements NetworkProvider { results.add(new Location(LocationType.POI, localId, lat, lon, null, value)); } + else if (type == 71) // strange (VBN) + { + // TODO don't know what to do + } else { throw new IllegalStateException("unknown type " + type + " on " + uri); diff --git a/src/de/schildbach/pte/SeptaProvider.java b/src/de/schildbach/pte/SeptaProvider.java index c8998537..48fc00e4 100644 --- a/src/de/schildbach/pte/SeptaProvider.java +++ b/src/de/schildbach/pte/SeptaProvider.java @@ -62,6 +62,27 @@ public class SeptaProvider extends AbstractHafasProvider return TimeZone.getTimeZone("EST"); } + public boolean hasCapabilities(final Capability... capabilities) + { + for (final Capability capability : capabilities) + if (capability == Capability.DEPARTURES) + return true; + + return false; + } + + private static final String AUTOCOMPLETE_URI = API_BASE + + "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&"; + private static final String ENCODING = "ISO-8859-1"; + + @Override + public List autocompleteStations(final CharSequence constraint) throws IOException + { + final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); + + return ajaxGetStops(uri); + } + @Override protected char normalizeType(final String type) { @@ -96,15 +117,6 @@ public class SeptaProvider extends AbstractHafasProvider return 0; } - public boolean hasCapabilities(final Capability... capabilities) - { - for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES) - return true; - - return false; - } - private final String NEARBY_URI = API_BASE + "stboard.exe/en?input=%s&selectDate=today&boardType=dep&productsFilter=1111&distance=50&near=Anzeigen"; diff --git a/src/de/schildbach/pte/SncbProvider.java b/src/de/schildbach/pte/SncbProvider.java index 7048d7ca..68c72d85 100644 --- a/src/de/schildbach/pte/SncbProvider.java +++ b/src/de/schildbach/pte/SncbProvider.java @@ -40,6 +40,7 @@ public class SncbProvider extends AbstractHafasProvider { public static final NetworkId NETWORK_ID = NetworkId.SNCB; public static final String OLD_NETWORK_ID = "hari.b-rail.be"; + private static final String API_BASE = "http://hari.b-rail.be/Hafas/bin/"; private static final String API_URI = "http://hari.b-rail.be/Hafas/bin/extxml.exe"; private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000; @@ -63,6 +64,18 @@ public class SncbProvider extends AbstractHafasProvider return false; } + private static final String AUTOCOMPLETE_URI = API_BASE + + "ajax-getstop.exe/dny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=255&REQ0JourneyStopsB=12&S=%s?&js=true&"; + private static final String ENCODING = "ISO-8859-1"; + + @Override + public List autocompleteStations(final CharSequence constraint) throws IOException + { + final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); + + return ajaxGetStops(uri); + } + private final String NEARBY_URI = "http://hari.b-rail.be/HAFAS/bin/stboard.exe/en?input=%s&distance=50&near=Anzeigen"; @Override diff --git a/src/de/schildbach/pte/VgsProvider.java b/src/de/schildbach/pte/VgsProvider.java index 466fcb66..5f836d77 100644 --- a/src/de/schildbach/pte/VgsProvider.java +++ b/src/de/schildbach/pte/VgsProvider.java @@ -43,7 +43,7 @@ import de.schildbach.pte.util.ParserUtils; public class VgsProvider extends AbstractHafasProvider { public static final String OLD_NETWORK_ID = "www.vgs-online.de"; - private static final String API_BASE = "http://www.vgs-online.de/cgi-bin/"; + private static final String API_BASE = "http://www.vgs-online.de/cgi-bin/"; // "http://www.saarfahrplan.de/cgi-bin/"; private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000; @@ -66,10 +66,16 @@ public class VgsProvider extends AbstractHafasProvider return false; } + private static final String AUTOCOMPLETE_URI = API_BASE + + "ajax-getstop.exe/eny?start=1&tpl=suggest2json&REQ0JourneyStopsS0A=1&getstop=1&noSession=yes&REQ0JourneyStopsB=12&REQ0JourneyStopsS0G=%s?&js=true&"; + private static final String ENCODING = "ISO-8859-1"; + @Override - public List autocompleteStations(CharSequence constraint) throws IOException + public List autocompleteStations(final CharSequence constraint) throws IOException { - throw new UnsupportedOperationException(); + final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); + + return ajaxGetStops(uri); } private final String NEARBY_URI = API_BASE diff --git a/test/de/schildbach/pte/live/SeptaProviderLiveTest.java b/test/de/schildbach/pte/live/SeptaProviderLiveTest.java index a7038cfa..96725e99 100644 --- a/test/de/schildbach/pte/live/SeptaProviderLiveTest.java +++ b/test/de/schildbach/pte/live/SeptaProviderLiveTest.java @@ -17,9 +17,12 @@ package de.schildbach.pte.live; +import java.util.List; + import org.junit.Test; import de.schildbach.pte.SeptaProvider; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -30,6 +33,22 @@ public class SeptaProviderLiveTest { private final SeptaProvider provider = new SeptaProvider(); + @Test + public void autocomplete() throws Exception + { + final List autocompletes = provider.autocompleteStations("Airport"); + + list(autocompletes); + } + + private void list(final List autocompletes) + { + System.out.print(autocompletes.size() + " "); + for (final Location autocomplete : autocompletes) + System.out.print(autocomplete.toDebugString() + " "); + System.out.println(); + } + @Test public void nearbyStation() throws Exception { diff --git a/test/de/schildbach/pte/live/VgsProviderLiveTest.java b/test/de/schildbach/pte/live/VgsProviderLiveTest.java index 64471aa9..c0ee132c 100644 --- a/test/de/schildbach/pte/live/VgsProviderLiveTest.java +++ b/test/de/schildbach/pte/live/VgsProviderLiveTest.java @@ -17,9 +17,12 @@ package de.schildbach.pte.live; +import java.util.List; + import org.junit.Test; import de.schildbach.pte.VgsProvider; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -30,6 +33,22 @@ public class VgsProviderLiveTest { private final VgsProvider provider = new VgsProvider(); + @Test + public void autocomplete() throws Exception + { + final List autocompletes = provider.autocompleteStations("Flughafen"); + + list(autocompletes); + } + + private void list(final List autocompletes) + { + System.out.print(autocompletes.size() + " "); + for (final Location autocomplete : autocompletes) + System.out.print(autocomplete.toDebugString() + " "); + System.out.println(); + } + @Test public void nearbyStation() throws Exception {