From 2087a04b3d21e167bd2c5787747f38e7603ee793 Mon Sep 17 00:00:00 2001 From: "andreas.schildbach@gmail.com" Date: Wed, 4 May 2011 10:29:39 +0000 Subject: [PATCH] autocomplete whereever possible git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@599 0924bc21-9374-b0fa-ee44-9ff1593b38f0 --- .../schildbach/pte/AbstractHafasProvider.java | 2 +- src/de/schildbach/pte/BahnProvider.java | 1 - src/de/schildbach/pte/BvgProvider.java | 30 ++----------------- src/de/schildbach/pte/DsbProvider.java | 2 -- src/de/schildbach/pte/InvgProvider.java | 5 ++++ src/de/schildbach/pte/LuProvider.java | 1 - src/de/schildbach/pte/NasaProvider.java | 7 ++--- src/de/schildbach/pte/NsProvider.java | 5 ++++ src/de/schildbach/pte/OebbProvider.java | 1 - src/de/schildbach/pte/RmvProvider.java | 1 - src/de/schildbach/pte/SbbProvider.java | 5 ++++ src/de/schildbach/pte/SeptaProvider.java | 1 - src/de/schildbach/pte/SncbProvider.java | 1 - src/de/schildbach/pte/VgsProvider.java | 1 - src/de/schildbach/pte/ZvvProvider.java | 1 - .../pte/live/InvgProviderLiveTest.java | 19 ++++++++++++ .../pte/live/NasaProviderLiveTest.java | 19 ++++++++++++ .../pte/live/RmvProviderLiveTest.java | 17 +++++++++++ 18 files changed, 76 insertions(+), 43 deletions(-) diff --git a/src/de/schildbach/pte/AbstractHafasProvider.java b/src/de/schildbach/pte/AbstractHafasProvider.java index 9e3a9eab..39f23e1f 100644 --- a/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/src/de/schildbach/pte/AbstractHafasProvider.java @@ -144,7 +144,7 @@ public abstract class AbstractHafasProvider implements NetworkProvider throw new IllegalStateException("cannot handle: " + type); } - public List autocompleteStations(final CharSequence constraint) throws IOException + public List xmlLocValReq(final CharSequence constraint) throws IOException { final String request = ""; diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index 3fe282ac..793c8447 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -66,7 +66,6 @@ public final class BahnProvider extends AbstractHafasProvider private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&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)); diff --git a/src/de/schildbach/pte/BvgProvider.java b/src/de/schildbach/pte/BvgProvider.java index 8294fe41..99c3a5f8 100644 --- a/src/de/schildbach/pte/BvgProvider.java +++ b/src/de/schildbach/pte/BvgProvider.java @@ -64,7 +64,7 @@ public final class BvgProvider extends AbstractHafasProvider public BvgProvider(final String additionalQueryParameter) { - super(null, null); + super(API_BASE + "query.bin/dn", null); this.additionalQueryParameter = additionalQueryParameter; } @@ -83,35 +83,9 @@ public final class BvgProvider extends AbstractHafasProvider return true; } - private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?Haltestelleninfo.*?(.*?).*?input=(\\d+)&.*?", Pattern.DOTALL); - private static final Pattern P_MULTI_NAME = Pattern.compile("\\s*(.*?)\\s*", - Pattern.DOTALL); - - @Override public List autocompleteStations(final CharSequence constraint) throws IOException { - final StringBuilder uri = new StringBuilder(API_BASE).append("stboard.bin/dox/dox"); - uri.append("?input=").append(ParserUtils.urlEncode(constraint.toString())); - if (additionalQueryParameter != null) - uri.append('&').append(additionalQueryParameter); - - final CharSequence page = ParserUtils.scrape(uri.toString()); - - final List results = new ArrayList(); - - final Matcher mSingle = P_SINGLE_NAME.matcher(page); - if (mSingle.matches()) - { - results.add(new Location(LocationType.STATION, Integer.parseInt(mSingle.group(2)), null, ParserUtils.resolveEntities(mSingle.group(1)))); - } - else - { - final Matcher mMulti = P_MULTI_NAME.matcher(page); - while (mMulti.find()) - results.add(new Location(LocationType.STATION, Integer.parseInt(mMulti.group(1)), null, ParserUtils.resolveEntities(mMulti.group(2)))); - } - - return results; + return xmlMLcReq(constraint); } private final String NEARBY_URI = API_BASE + "stboard.bin/dn?distance=50&near&input=%s"; diff --git a/src/de/schildbach/pte/DsbProvider.java b/src/de/schildbach/pte/DsbProvider.java index b5ee2ede..274281e5 100644 --- a/src/de/schildbach/pte/DsbProvider.java +++ b/src/de/schildbach/pte/DsbProvider.java @@ -52,13 +52,11 @@ public class DsbProvider extends AbstractHafasProvider return true; return false; - } private static final String AUTOCOMPLETE_URI = API_BASE + "ajax-getstop.exe/dn?getstop=1&REQ0JourneyStopsS0A=255&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)); diff --git a/src/de/schildbach/pte/InvgProvider.java b/src/de/schildbach/pte/InvgProvider.java index 9924028a..e2fc97b7 100644 --- a/src/de/schildbach/pte/InvgProvider.java +++ b/src/de/schildbach/pte/InvgProvider.java @@ -68,6 +68,11 @@ public class InvgProvider extends AbstractHafasProvider } + public List autocompleteStations(final CharSequence constraint) throws IOException + { + return xmlMLcReq(constraint); + } + private static final String[] PLACES = { "Ingolstadt", "München" }; @Override diff --git a/src/de/schildbach/pte/LuProvider.java b/src/de/schildbach/pte/LuProvider.java index f34357df..025d48d0 100644 --- a/src/de/schildbach/pte/LuProvider.java +++ b/src/de/schildbach/pte/LuProvider.java @@ -54,7 +54,6 @@ public class LuProvider extends AbstractHafasProvider return false; } - @Override public List autocompleteStations(final CharSequence constraint) throws IOException { return xmlMLcReq(constraint); diff --git a/src/de/schildbach/pte/NasaProvider.java b/src/de/schildbach/pte/NasaProvider.java index 330f4a88..2d718d7d 100644 --- a/src/de/schildbach/pte/NasaProvider.java +++ b/src/de/schildbach/pte/NasaProvider.java @@ -50,7 +50,7 @@ public class NasaProvider extends AbstractHafasProvider public NasaProvider() { - super(null, null); + super(API_BASE + "query.exe/dn", null); } public NetworkId id() @@ -67,10 +67,9 @@ public class NasaProvider extends AbstractHafasProvider return false; } - @Override - public List autocompleteStations(CharSequence constraint) throws IOException + public List autocompleteStations(final CharSequence constraint) throws IOException { - throw new UnsupportedOperationException(); + return xmlMLcReq(constraint); } private final String NEARBY_URI = API_BASE diff --git a/src/de/schildbach/pte/NsProvider.java b/src/de/schildbach/pte/NsProvider.java index f06ce4a6..9f6bb4c7 100644 --- a/src/de/schildbach/pte/NsProvider.java +++ b/src/de/schildbach/pte/NsProvider.java @@ -63,6 +63,11 @@ public class NsProvider extends AbstractHafasProvider return false; } + public List autocompleteStations(CharSequence constraint) throws IOException + { + throw new UnsupportedOperationException(); + } + 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/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index bcd19c26..c81da043 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -77,7 +77,6 @@ public class OebbProvider extends AbstractHafasProvider + "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)); diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index d6c0174d..c0698cff 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -89,7 +89,6 @@ public class RmvProvider extends AbstractHafasProvider private static final Pattern P_MULTI_NAME = Pattern.compile("\\s*(.*?)\\s*", Pattern.DOTALL); - @Override public List autocompleteStations(final CharSequence constraint) throws IOException { final CharSequence page = ParserUtils.scrape(NAME_URL + ParserUtils.urlEncode(constraint.toString())); diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 79deb457..5f1eeada 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -65,6 +65,11 @@ public class SbbProvider extends AbstractHafasProvider return false; } + public List autocompleteStations(final CharSequence constraint) throws IOException + { + return xmlMLcReq(constraint); + } + private final static String NEARBY_URI = API_BASE + "bhftafel.exe/dn?input=%s&distance=50&near=Anzeigen"; @Override diff --git a/src/de/schildbach/pte/SeptaProvider.java b/src/de/schildbach/pte/SeptaProvider.java index 48fc00e4..ce2da0ee 100644 --- a/src/de/schildbach/pte/SeptaProvider.java +++ b/src/de/schildbach/pte/SeptaProvider.java @@ -75,7 +75,6 @@ public class SeptaProvider extends AbstractHafasProvider + "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)); diff --git a/src/de/schildbach/pte/SncbProvider.java b/src/de/schildbach/pte/SncbProvider.java index 68c72d85..239d8e1b 100644 --- a/src/de/schildbach/pte/SncbProvider.java +++ b/src/de/schildbach/pte/SncbProvider.java @@ -68,7 +68,6 @@ public class SncbProvider extends AbstractHafasProvider + "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)); diff --git a/src/de/schildbach/pte/VgsProvider.java b/src/de/schildbach/pte/VgsProvider.java index 5f836d77..4e3d75d4 100644 --- a/src/de/schildbach/pte/VgsProvider.java +++ b/src/de/schildbach/pte/VgsProvider.java @@ -70,7 +70,6 @@ public class VgsProvider extends AbstractHafasProvider + "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(final CharSequence constraint) throws IOException { final String uri = String.format(AUTOCOMPLETE_URI, ParserUtils.urlEncode(constraint.toString(), ENCODING)); diff --git a/src/de/schildbach/pte/ZvvProvider.java b/src/de/schildbach/pte/ZvvProvider.java index d7e7a830..5024da6e 100644 --- a/src/de/schildbach/pte/ZvvProvider.java +++ b/src/de/schildbach/pte/ZvvProvider.java @@ -54,7 +54,6 @@ public class ZvvProvider extends AbstractHafasProvider return false; } - @Override public List autocompleteStations(final CharSequence constraint) throws IOException { return xmlMLcReq(constraint); diff --git a/test/de/schildbach/pte/live/InvgProviderLiveTest.java b/test/de/schildbach/pte/live/InvgProviderLiveTest.java index 1e650ff2..88df177f 100644 --- a/test/de/schildbach/pte/live/InvgProviderLiveTest.java +++ b/test/de/schildbach/pte/live/InvgProviderLiveTest.java @@ -17,9 +17,12 @@ package de.schildbach.pte.live; +import java.util.List; + import org.junit.Test; import de.schildbach.pte.InvgProvider; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -30,6 +33,22 @@ public class InvgProviderLiveTest { private final InvgProvider provider = new InvgProvider(); + @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 { diff --git a/test/de/schildbach/pte/live/NasaProviderLiveTest.java b/test/de/schildbach/pte/live/NasaProviderLiveTest.java index a18f9587..32ac4ebd 100644 --- a/test/de/schildbach/pte/live/NasaProviderLiveTest.java +++ b/test/de/schildbach/pte/live/NasaProviderLiveTest.java @@ -17,9 +17,12 @@ package de.schildbach.pte.live; +import java.util.List; + import org.junit.Test; import de.schildbach.pte.NasaProvider; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -30,6 +33,22 @@ public class NasaProviderLiveTest { private final NasaProvider provider = new NasaProvider(); + @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 { diff --git a/test/de/schildbach/pte/live/RmvProviderLiveTest.java b/test/de/schildbach/pte/live/RmvProviderLiveTest.java index 5b95c5dd..bed76828 100644 --- a/test/de/schildbach/pte/live/RmvProviderLiveTest.java +++ b/test/de/schildbach/pte/live/RmvProviderLiveTest.java @@ -18,6 +18,7 @@ package de.schildbach.pte.live; import java.util.Date; +import java.util.List; import org.junit.Test; @@ -38,6 +39,22 @@ public class RmvProviderLiveTest private final RmvProvider provider = new RmvProvider(); protected static final String ALL_PRODUCTS = "IRSUTBFC"; + @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 {