diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 53c6ed1f..3d35052d 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -39,12 +39,39 @@ public class SbbProvider implements NetworkProvider public boolean hasCapabilities(final Capability... capabilities) { - return false; + for (final Capability capability : capabilities) + if (capability != Capability.DEPARTURES) + return false; + + return true; } + private static final String NAME_URL = "http://fahrplan.sbb.ch/bin/bhftafel.exe/dox?input="; + private static final Pattern P_SINGLE_NAME = Pattern.compile(".*?.*", + Pattern.DOTALL); + private static final Pattern P_MULTI_NAME = Pattern.compile("\n?" // + + "(.*?)\n?" // + + "", Pattern.DOTALL); + public List autoCompleteStationName(final CharSequence constraint) throws IOException { - throw new UnsupportedOperationException(); + final CharSequence page = ParserUtils.scrape(NAME_URL + ParserUtils.urlEncode(constraint.toString())); + + final List names = new ArrayList(); + + final Matcher mSingle = P_SINGLE_NAME.matcher(page); + if (mSingle.matches()) + { + names.add(ParserUtils.resolveEntities(mSingle.group(1))); + } + else + { + final Matcher mMulti = P_MULTI_NAME.matcher(page); + while (mMulti.find()) + names.add(ParserUtils.resolveEntities(mMulti.group(2))); + } + + return names; } public List nearbyStations(final double lat, final double lon, final int maxDistance, final int maxStations) throws IOException