diff --git a/src/de/schildbach/pte/AbstractEfaProvider.java b/src/de/schildbach/pte/AbstractEfaProvider.java index 2967e587..3393ed81 100644 --- a/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/src/de/schildbach/pte/AbstractEfaProvider.java @@ -624,11 +624,10 @@ public abstract class AbstractEfaProvider implements NetworkProvider return (double) value / 1000000; } - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep, products, walkSpeed) + "&sessionID=0"; + final String uri = connectionsQueryUri(from, via, to, date, dep, products, walkSpeed) + "&sessionID=0"; final CharSequence page = ParserUtils.scrape(uri); @@ -799,22 +798,46 @@ public abstract class AbstractEfaProvider implements NetworkProvider throw new UnsupportedOperationException(); } - protected abstract String connectionsQueryUri(LocationType fromType, String from, LocationType viaType, String via, LocationType toType, - String to, Date date, boolean dep, String products, WalkSpeed walkSpeed); + protected abstract String connectionsQueryUri(Location from, Location via, Location to, Date date, boolean dep, String products, + WalkSpeed walkSpeed); protected abstract String commandLink(String sessionId, String command); - protected static final String locationTypeValue(final LocationType locationType) + protected static final void appendLocation(final StringBuilder uri, final Location location, final String paramSuffix) { - if (locationType == LocationType.STATION) + if (location.type == LocationType.ADDRESS && location.lat != 0 && location.lon != 0) + { + uri.append("&nameInfo_").append(paramSuffix).append("=").append(String.format("%2.6f:%2.6f", location.lon / 1E6, location.lat / 1E6)) + .append(":WGS84[DD.dddddd]"); + uri.append("&typeInfo_").append(paramSuffix).append("=coord"); + } + else + { + uri.append("&type_").append(paramSuffix).append("=").append(locationTypeValue(location)); + uri.append("&name_").append(paramSuffix).append("=").append(ParserUtils.urlEncode(locationValue(location), "ISO-8859-1")); + } + } + + protected static final String locationTypeValue(final Location location) + { + final LocationType type = location.type; + if (type == LocationType.STATION) return "stop"; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return "any"; // strange, matches with anyObjFilter - if (locationType == LocationType.POI) + if (type == LocationType.POI) return "any"; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return "any"; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + protected static final String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } protected static final String productParams(final String products) diff --git a/src/de/schildbach/pte/BahnProvider.java b/src/de/schildbach/pte/BahnProvider.java index c9a8bf2c..0e5f6540 100644 --- a/src/de/schildbach/pte/BahnProvider.java +++ b/src/de/schildbach/pte/BahnProvider.java @@ -30,10 +30,10 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; @@ -54,10 +54,6 @@ public final class BahnProvider implements NetworkProvider public boolean hasCapabilities(final Capability... capabilities) { - for (final Capability capability : capabilities) - if (capability == Capability.LOCATION_WGS84) - return false; - return true; } @@ -123,8 +119,7 @@ public final class BahnProvider implements NetworkProvider return new NearbyStationsResult(uri, stations.subList(0, maxStations)); } - private String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep) + private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep) { final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); @@ -132,15 +127,15 @@ public final class BahnProvider implements NetworkProvider uri.append(API_BASE).append("query.exe/dox"); uri.append("?REQ0HafasOptimize1=0:1"); - uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); - uri.append("&REQ0JourneyStopsS0A=").append(locationType(fromType)); + uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(locationValue(from))); + uri.append("&REQ0JourneyStopsS0A=").append(locationTypeValue(from)); if (via != null) { - uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via)); - uri.append("&REQ0JourneyStops1.0A=").append(locationType(viaType)); + uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(locationValue(via))); + uri.append("&REQ0JourneyStops1.0A=").append(locationTypeValue(via)); } - uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(to)); - uri.append("&REQ0JourneyStopsZ0A=").append(locationType(toType)); + uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(locationValue(to))); + uri.append("&REQ0JourneyStopsZ0A=").append(locationTypeValue(to)); uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&REQ0JourneyTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); @@ -154,15 +149,24 @@ public final class BahnProvider implements NetworkProvider return uri.toString(); } - private static int locationType(final LocationType locationType) + private static final int locationTypeValue(final Location location) { - if (locationType == LocationType.STATION) + final LocationType type = location.type; + if (type == LocationType.STATION) return 1; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 2; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 255; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + private static final String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } private static final Pattern P_PRE_ADDRESS = Pattern.compile( @@ -171,11 +175,10 @@ public final class BahnProvider implements NetworkProvider private static final Pattern P_CHECK_CONNECTIONS_ERROR = Pattern .compile("(zu dicht beieinander|mehrfach vorhanden oder identisch)|(leider konnte zu Ihrer Anfrage keine Verbindung gefunden werden)|(derzeit nur Auskünfte vom)"); - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep); + final String uri = connectionsQueryUri(from, via, to, date, dep); final CharSequence page = ParserUtils.scrape(uri); final Matcher mError = P_CHECK_CONNECTIONS_ERROR.matcher(page); diff --git a/src/de/schildbach/pte/GvhProvider.java b/src/de/schildbach/pte/GvhProvider.java index 3c5d9bd0..72c729fa 100644 --- a/src/de/schildbach/pte/GvhProvider.java +++ b/src/de/schildbach/pte/GvhProvider.java @@ -21,7 +21,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.util.ParserUtils; /** @@ -35,8 +35,7 @@ public class GvhProvider extends AbstractEfaProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS || capability == Capability.LOCATION_STATION_ID - || capability == Capability.LOCATION_WGS84) + if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS) return true; return false; @@ -79,8 +78,8 @@ public class GvhProvider extends AbstractEfaProvider } @Override - protected String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + protected String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HHmm"); @@ -93,50 +92,10 @@ public class GvhProvider extends AbstractEfaProvider uri.append("&outputFormat=XML"); uri.append("&coordOutputFormat=WGS84"); - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_origin=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_origin=coord"); - } - else - { - uri.append("&type_origin=").append(locationTypeValue(fromType)); - uri.append("&name_origin=").append(ParserUtils.urlEncode(from, "ISO-8859-1")); // fine-grained location - } - - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_destination=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_destination=coord"); - } - else - { - uri.append("&type_destination=").append(locationTypeValue(toType)); - uri.append("&name_destination=").append(ParserUtils.urlEncode(to, "ISO-8859-1")); // fine-grained location - } - + appendLocation(uri, from, "origin"); + appendLocation(uri, to, "destination"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - final String[] parts = via.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_via=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_via=coord"); - } - else - { - uri.append("&type_via=").append(locationTypeValue(viaType)); - uri.append("&name_via=").append(ParserUtils.urlEncode(via, "ISO-8859-1")); - } - } + appendLocation(uri, via, "via"); uri.append("&itdDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&itdTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); diff --git a/src/de/schildbach/pte/LinzProvider.java b/src/de/schildbach/pte/LinzProvider.java index 8d3eada6..b476c2d6 100644 --- a/src/de/schildbach/pte/LinzProvider.java +++ b/src/de/schildbach/pte/LinzProvider.java @@ -21,7 +21,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.util.ParserUtils; /** @@ -35,8 +35,7 @@ public class LinzProvider extends AbstractEfaProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS || capability == Capability.LOCATION_STATION_ID - || capability == Capability.LOCATION_WGS84) + if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS) return true; return false; @@ -71,8 +70,8 @@ public class LinzProvider extends AbstractEfaProvider } @Override - protected String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + protected String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HHmm"); @@ -85,56 +84,10 @@ public class LinzProvider extends AbstractEfaProvider uri.append("&outputFormat=XML"); uri.append("&coordOutputFormat=WGS84"); - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_origin=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_origin=coord"); - } - else - { - uri.append("&place_origin="); // coarse-grained location, e.g. city - uri.append("&placeState_origin=empty"); // empty|identified - uri.append("&type_origin=").append(locationTypeValue(fromType)); - uri.append("&name_origin=").append(ParserUtils.urlEncode(from, "ISO-8859-1")); // fine-grained location - } - - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_destination=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_destination=coord"); - } - else - { - uri.append("&place_destination="); // coarse-grained location, e.g. city - uri.append("&placeState_destination=empty"); // empty|identified - uri.append("&type_destination=").append(locationTypeValue(toType)); - uri.append("&name_destination=").append(ParserUtils.urlEncode(to, "ISO-8859-1")); // fine-grained location - } - + appendLocation(uri, from, "origin"); + appendLocation(uri, to, "destination"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - final String[] parts = via.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_via=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_via=coord"); - } - else - { - uri.append("&place_via="); - uri.append("&placeState_via=empty"); - uri.append("&type_via=").append(locationTypeValue(viaType)); - uri.append("&name_via=").append(ParserUtils.urlEncode(via, "ISO-8859-1")); - } - } + appendLocation(uri, via, "via"); uri.append("&itdDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&itdTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); diff --git a/src/de/schildbach/pte/MvvProvider.java b/src/de/schildbach/pte/MvvProvider.java index e7c8f710..e88167e4 100644 --- a/src/de/schildbach/pte/MvvProvider.java +++ b/src/de/schildbach/pte/MvvProvider.java @@ -30,9 +30,9 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; @@ -176,8 +176,8 @@ public class MvvProvider extends AbstractEfaProvider } @Override - protected String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + protected String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); final DateFormat YEAR_FORMAT = new SimpleDateFormat("yyyy"); @@ -210,83 +210,10 @@ public class MvvProvider extends AbstractEfaProvider uri.append("&anySigWhenPerfectNoOtherMatches=1"); // uri.append("&lineRestriction=403"); - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_origin=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_origin=coord"); - } - else - { - uri.append("&useHouseNumberList_origin=1"); - uri.append("&place_origin="); // coarse-grained location, e.g. city - uri.append("&placeState_origin=empty"); // empty|identified - uri.append("&nameState_origin=empty"); // empty|identified|list|notidentified - uri.append("&placeInfo_origin=invalid"); // invalid - uri.append("&nameInfo_origin=invalid"); // invalid - uri.append("&typeInfo_origin=invalid"); // invalid - uri.append("&reducedAnyWithoutAddressObjFilter_origin=102"); - uri.append("&reducedAnyPostcodeObjFilter_origin=64"); - uri.append("&reducedAnyTooManyObjFilter_origin=2"); - uri.append("&type_origin=").append(locationType(fromType)); - uri.append("&name_origin=").append(ParserUtils.urlEncode(from, ENCODING)); // fine-grained location - uri.append("&anyObjFilter_origin=").append(locationAnyObjFilter(fromType)); - } - - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_destination=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_destination=coord"); - } - else - { - uri.append("&useHouseNumberList_destination=1"); - uri.append("&place_destination="); // coarse-grained location, e.g. city - uri.append("&placeState_destination=empty"); // empty|identified - uri.append("&nameState_destination=empty"); // empty|identified|list|notidentified - uri.append("&placeInfo_destination=invalid"); // invalid - uri.append("&nameInfo_destination=invalid"); // invalid - uri.append("&typeInfo_destination=invalid"); // invalid - uri.append("&reducedAnyWithoutAddressObjFilter_destination=102"); - uri.append("&reducedAnyPostcodeObjFilter_destination=64"); - uri.append("&reducedAnyTooManyObjFilter_destination=2"); - uri.append("&type_destination=").append(locationType(toType)); - uri.append("&name_destination=").append(ParserUtils.urlEncode(to, ENCODING)); // fine-grained location - uri.append("&anyObjFilter_destination=").append(locationAnyObjFilter(toType)); - } - + appendLocationMvv(uri, from, "origin"); + appendLocationMvv(uri, to, "destination"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - final String[] parts = via.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_via=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_via=coord"); - } - else - { - uri.append("&useHouseNumberList_via=1"); - uri.append("&place_via="); - uri.append("&placeState_via=empty"); - uri.append("&nameState_via=empty"); - uri.append("&placeInfo_via=invalid"); - uri.append("&nameInfo_via=invalid"); - uri.append("&typeInfo_via=invalid"); - uri.append("&reducedAnyWithoutAddressObjFilter_via=102"); - uri.append("&reducedAnyPostcodeObjFilter_via=64"); - uri.append("&reducedAnyTooManyObjFilter_via=2"); - uri.append("&type_via=").append(locationType(viaType)); - uri.append("&name_via=").append(ParserUtils.urlEncode(via, ENCODING)); - uri.append("&anyObjFilter_via=").append(locationAnyObjFilter(viaType)); - } - } + appendLocationMvv(uri, via, "via"); uri.append("&itdTripDateTimeDepArr=").append(dep ? "dep" : "arr"); uri.append("&itdTimeHour=").append(ParserUtils.urlEncode(HOUR_FORMAT.format(date))); @@ -298,30 +225,44 @@ public class MvvProvider extends AbstractEfaProvider return uri.toString(); } - private static String locationType(final LocationType locationType) + private static final void appendLocationMvv(final StringBuilder uri, final Location location, final String paramSuffix) { - if (locationType == LocationType.STATION) - return "stop"; - if (locationType == LocationType.ADDRESS) - return "any"; // strange, matches with anyObjFilter - if (locationType == LocationType.POI) - return "any"; - if (locationType == LocationType.ANY) - return "any"; - throw new IllegalArgumentException(locationType.toString()); + if (location.type == LocationType.ADDRESS && location.lat != 0 && location.lon != 0) + { + uri.append("&nameInfo_").append(paramSuffix).append("=").append(String.format("%2.6f:%2.6f", location.lon / 1E6, location.lat / 1E6)) + .append(":WGS84[DD.dddddd]"); + uri.append("&typeInfo_").append(paramSuffix).append("=coord"); + } + else + { + uri.append("&useHouseNumberList_").append(paramSuffix).append("=1"); + uri.append("&place_").append(paramSuffix).append("="); // coarse-grained location, e.g. city + uri.append("&placeState_").append(paramSuffix).append("=empty"); // empty|identified + uri.append("&nameState_").append(paramSuffix).append("=empty"); // empty|identified|list|notidentified + uri.append("&placeInfo_").append(paramSuffix).append("=invalid"); // invalid + uri.append("&nameInfo_").append(paramSuffix).append("=invalid"); // invalid + uri.append("&typeInfo_").append(paramSuffix).append("=invalid"); // invalid + uri.append("&reducedAnyWithoutAddressObjFilter_").append(paramSuffix).append("=102"); + uri.append("&reducedAnyPostcodeObjFilter_").append(paramSuffix).append("=64"); + uri.append("&reducedAnyTooManyObjFilter_").append(paramSuffix).append("=2"); + uri.append("&type_").append(paramSuffix).append("=").append(locationTypeValue(location)); + uri.append("&name_").append(paramSuffix).append("=").append(ParserUtils.urlEncode(locationValue(location), ENCODING)); + uri.append("&anyObjFilter_").append(paramSuffix).append("=").append(locationAnyObjFilterMvv(location)); + } } - private static int locationAnyObjFilter(final LocationType locationType) + private static final int locationAnyObjFilterMvv(final Location location) { - if (locationType == LocationType.STATION) + final LocationType type = location.type; + if (type == LocationType.STATION) return 2; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 12; - if (locationType == LocationType.POI) + if (type == LocationType.POI) return 32; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 0; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); } private static final Pattern P_PRE_ADDRESS = Pattern.compile("", @@ -331,11 +272,10 @@ public class MvvProvider extends AbstractEfaProvider "(Start und Ziel sind identisch)|(konnte keine Verbindung gefunden werden)", Pattern.CASE_INSENSITIVE); @Override - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep, products, walkSpeed); + final String uri = connectionsQueryUri(from, via, to, date, dep, products, walkSpeed); System.out.println(uri); final CharSequence page = ParserUtils.scrape(uri); diff --git a/src/de/schildbach/pte/NasaProvider.java b/src/de/schildbach/pte/NasaProvider.java index 3d20f754..70628ae7 100644 --- a/src/de/schildbach/pte/NasaProvider.java +++ b/src/de/schildbach/pte/NasaProvider.java @@ -28,10 +28,9 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult.Status; @@ -245,8 +244,8 @@ public class NasaProvider extends AbstractHafasProvider return 0; } - public QueryConnectionsResult queryConnections(LocationType fromType, String from, LocationType viaType, String via, LocationType toType, - String to, Date date, boolean dep, String products, WalkSpeed walkSpeed) throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { throw new UnsupportedOperationException(); } diff --git a/src/de/schildbach/pte/NetworkProvider.java b/src/de/schildbach/pte/NetworkProvider.java index 4bf82042..dbb0ee3e 100644 --- a/src/de/schildbach/pte/NetworkProvider.java +++ b/src/de/schildbach/pte/NetworkProvider.java @@ -23,7 +23,6 @@ import java.util.List; import de.schildbach.pte.dto.GetConnectionDetailsResult; import de.schildbach.pte.dto.Location; -import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -37,7 +36,7 @@ public interface NetworkProvider { public enum Capability { - NEARBY_STATIONS, DEPARTURES, CONNECTIONS, LOCATION_WGS84, LOCATION_STATION_ID + NEARBY_STATIONS, DEPARTURES, CONNECTIONS } public enum WalkSpeed @@ -78,16 +77,10 @@ public interface NetworkProvider /** * Query connections, asking for any ambiguousnesses * - * @param fromType - * type of location to route from, mandatory * @param from * location to route from, mandatory - * @param viaType - * type of location to route via, may be {@code null} * @param via * location to route via, may be {@code null} - * @param toType - * type of location to route to, mandatory * @param to * location to route to, mandatory * @param date @@ -103,8 +96,8 @@ public interface NetworkProvider * @return result object that can contain alternatives to clear up ambiguousnesses, or contains possible connections * @throws IOException */ - QueryConnectionsResult queryConnections(LocationType fromType, String from, LocationType viaType, String via, LocationType toType, String to, - Date date, boolean dep, String products, WalkSpeed walkSpeed) throws IOException; + QueryConnectionsResult queryConnections(Location from, Location via, Location to, Date date, boolean dep, String products, WalkSpeed walkSpeed) + throws IOException; /** * Query more connections (e.g. earlier or later) diff --git a/src/de/schildbach/pte/OebbProvider.java b/src/de/schildbach/pte/OebbProvider.java index d0e33769..f3a82776 100644 --- a/src/de/schildbach/pte/OebbProvider.java +++ b/src/de/schildbach/pte/OebbProvider.java @@ -32,10 +32,10 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -51,7 +51,7 @@ public class OebbProvider extends AbstractHafasProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS || capability == Capability.LOCATION_STATION_ID) + if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS) return true; return false; @@ -146,9 +146,8 @@ public class OebbProvider extends AbstractHafasProvider WALKSPEED_MAP.put(WalkSpeed.FAST, "85"); } - private String connectionsQuery(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + private String connectionsQuery(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); @@ -158,17 +157,17 @@ public class OebbProvider extends AbstractHafasProvider uri.append("&start.x=0"); uri.append("&start.y=0"); uri.append("&start=Suchen"); - uri.append("&REQ0JourneyStopsS0A=").append(locationType(fromType)); - uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); + uri.append("&REQ0JourneyStopsS0A=").append(locationTypeValue(from)); + uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(locationValue(from))); uri.append("&REQ0JourneyStopsS0ID="); // "tupel"? if (via != null) { - uri.append("&REQ0JourneyStops1.0A=").append(locationType(viaType)); - uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via)); + uri.append("&REQ0JourneyStops1.0A=").append(locationTypeValue(via)); + uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(locationValue(via))); uri.append("&REQ0JourneyStops1.0ID="); } - uri.append("&REQ0JourneyStopsZ0A=").append(locationType(toType)); - uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(to)); + uri.append("&REQ0JourneyStopsZ0A=").append(locationTypeValue(to)); + uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(locationValue(to))); uri.append("&REQ0JourneyStopsZ0ID="); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&wDayExt0=").append(ParserUtils.urlEncode("Mo|Di|Mi|Do|Fr|Sa|So")); @@ -195,22 +194,30 @@ public class OebbProvider extends AbstractHafasProvider uri.append("&REQ0JourneyProduct_prod_section_0_6=1&REQ0JourneyProduct_prod_section_0_11=1"); if (p == 'F') uri.append("&REQ0JourneyProduct_prod_section_0_7=1"); - if (p == 'C') - ; // FIXME + // FIXME if (p == 'C') } return uri.toString(); } - private static int locationType(final LocationType locationType) + private static int locationTypeValue(final Location location) { - if (locationType == LocationType.STATION) + final LocationType type = location.type; + if (type == LocationType.STATION) return 1; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 2; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 255; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + private static String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } private static final String QUERY_CONNECTIONS_FORM_URL = API_BASE + "query.exe/dn?"; @@ -222,9 +229,8 @@ public class OebbProvider extends AbstractHafasProvider "]*>\n(.*?)", Pattern.DOTALL); private static final Pattern P_ADDRESSES = Pattern.compile("]*>\\s*([^<\\[]*)(?:\\[[^\\[]*\\])?\\s*", Pattern.DOTALL); - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { // get base url and cookies from form final CharSequence form = ParserUtils.scrape(QUERY_CONNECTIONS_FORM_URL, false, null, null, true); @@ -234,7 +240,7 @@ public class OebbProvider extends AbstractHafasProvider final String baseUri = m.group(1); // query - final String query = connectionsQuery(fromType, from, viaType, via, toType, to, date, dep, products, walkSpeed); + final String query = connectionsQuery(from, via, to, date, dep, products, walkSpeed); final CharSequence page = ParserUtils.scrape(baseUri, true, query, null, true); final Matcher mError = P_QUERY_CONNECTIONS_ERROR.matcher(page); diff --git a/src/de/schildbach/pte/RmvProvider.java b/src/de/schildbach/pte/RmvProvider.java index 82d6ef06..0562b639 100644 --- a/src/de/schildbach/pte/RmvProvider.java +++ b/src/de/schildbach/pte/RmvProvider.java @@ -30,10 +30,10 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -53,10 +53,6 @@ public class RmvProvider extends AbstractHafasProvider public boolean hasCapabilities(final Capability... capabilities) { - for (final Capability capability : capabilities) - if (capability == Capability.LOCATION_WGS84) - return false; - return true; } @@ -104,8 +100,8 @@ public class RmvProvider extends AbstractHafasProvider WALKSPEED_MAP.put(WalkSpeed.FAST, "85"); } - private String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); @@ -116,14 +112,14 @@ public class RmvProvider extends AbstractHafasProvider uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&REQ0JourneyTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); - uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); - uri.append("&REQ0JourneyStopsS0A=").append(locationType(fromType)); - uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(to)); - uri.append("&REQ0JourneyStopsZ0A=").append(locationType(toType)); + uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(locationValue(from))); + uri.append("&REQ0JourneyStopsS0A=").append(locationTypeValue(from)); + uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(locationValue(to))); + uri.append("&REQ0JourneyStopsZ0A=").append(locationTypeValue(to)); if (via != null) { - uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via)); - uri.append("&REQ0JourneyStops1.0A=").append(locationType(viaType)); + uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(locationValue(via))); + uri.append("&REQ0JourneyStops1.0A=").append(locationTypeValue(via)); } uri.append("&REQ0JourneyDep_Foot_speed=").append(WALKSPEED_MAP.get(walkSpeed)); @@ -143,8 +139,7 @@ public class RmvProvider extends AbstractHafasProvider uri.append("&REQ0JourneyProduct_prod_list_6=0000001101000000"); if (p == 'F') uri.append("&REQ0JourneyProduct_prod_list_7=0000000010000000"); - if (p == 'C') - ; // FIXME + // FIXME if (p == 'C') } uri.append("&start=Suchen"); @@ -152,15 +147,24 @@ public class RmvProvider extends AbstractHafasProvider return uri.toString(); } - private static int locationType(final LocationType locationType) + private static int locationTypeValue(final Location location) { - if (locationType == LocationType.STATION) + final LocationType type = location.type; + if (type == LocationType.STATION) return 1; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 2; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 255; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + private static String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } private static final Pattern P_PRE_ADDRESS = Pattern.compile("(?:Geben Sie einen (Startort|Zielort) an.*?)?Bitte wählen Sie aus der Liste", @@ -170,11 +174,10 @@ public class RmvProvider extends AbstractHafasProvider private static final Pattern P_CHECK_CONNECTIONS_ERROR = Pattern.compile( "(mehrfach vorhanden oder identisch)|(keine Verbindung gefunden werden)|(derzeit nur Auskünfte vom)", Pattern.CASE_INSENSITIVE); - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep, products, walkSpeed); + final String uri = connectionsQueryUri(from, via, to, date, dep, products, walkSpeed); final CharSequence page = ParserUtils.scrape(uri); final Matcher mError = P_CHECK_CONNECTIONS_ERROR.matcher(page); diff --git a/src/de/schildbach/pte/SbbProvider.java b/src/de/schildbach/pte/SbbProvider.java index 2fb005fa..bc26f32e 100644 --- a/src/de/schildbach/pte/SbbProvider.java +++ b/src/de/schildbach/pte/SbbProvider.java @@ -28,10 +28,10 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -50,7 +50,7 @@ public class SbbProvider extends AbstractHafasProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.NEARBY_STATIONS || capability == Capability.LOCATION_WGS84) + if (capability == Capability.NEARBY_STATIONS) return false; return true; @@ -93,8 +93,7 @@ public class SbbProvider extends AbstractHafasProvider return String.format(NEARBY_URI, stationId); } - private String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep) + private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep) { final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); @@ -107,17 +106,17 @@ public class SbbProvider extends AbstractHafasProvider uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); uri.append("&REQ0HafasSkipLongChanges=1"); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); - uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); - uri.append("&REQ0JourneyStopsS0A=").append(locationType(fromType)); + uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(locationValue(from))); + uri.append("&REQ0JourneyStopsS0A=").append(locationTypeValue(from)); uri.append("&REQ0JourneyStopsS0ID="); if (via != null) { - uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via)); - uri.append("&REQ0JourneyStops1.0A=").append(locationType(viaType)); + uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(locationValue(via))); + uri.append("&REQ0JourneyStops1.0A=").append(locationTypeValue(via)); uri.append("&REQ0JourneyStops1.0ID="); } - uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(to)); - uri.append("&REQ0JourneyStopsZ0A=").append(locationType(toType)); + uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(locationValue(to))); + uri.append("&REQ0JourneyStopsZ0A=").append(locationTypeValue(to)); uri.append("&REQ0JourneyStopsZ0ID="); uri.append("&REQ0JourneyTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); uri.append("&queryPageDisplayed=yes"); @@ -129,15 +128,24 @@ public class SbbProvider extends AbstractHafasProvider return uri.toString(); } - private static int locationType(final LocationType locationType) + private static int locationTypeValue(final Location location) { - if (locationType == LocationType.STATION) + final LocationType type = location.type; + if (type == LocationType.STATION) return 1; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 2; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 7; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + private static String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } private static final Pattern P_PRE_ADDRESS = Pattern.compile( @@ -146,11 +154,10 @@ public class SbbProvider extends AbstractHafasProvider private static final Pattern P_CHECK_CONNECTIONS_ERROR = Pattern .compile("(mehrfach vorhanden oder identisch)|(keine Verbindung gefunden werden)|(liegt nach dem Ende der Fahrplanperiode|liegt vor Beginn der Fahrplanperiode)"); - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep); + final String uri = connectionsQueryUri(from, via, to, date, dep); final CharSequence page = ParserUtils.scrape(uri); final Matcher mError = P_CHECK_CONNECTIONS_ERROR.matcher(page); diff --git a/src/de/schildbach/pte/SncbProvider.java b/src/de/schildbach/pte/SncbProvider.java index b7e64f9c..83593896 100644 --- a/src/de/schildbach/pte/SncbProvider.java +++ b/src/de/schildbach/pte/SncbProvider.java @@ -26,10 +26,9 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult.Status; @@ -66,9 +65,8 @@ public class SncbProvider extends AbstractHafasProvider return String.format(NEARBY_URI, stationId); } - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { throw new UnsupportedOperationException(); } diff --git a/src/de/schildbach/pte/TflProvider.java b/src/de/schildbach/pte/TflProvider.java index edd0801e..1a082714 100644 --- a/src/de/schildbach/pte/TflProvider.java +++ b/src/de/schildbach/pte/TflProvider.java @@ -26,10 +26,9 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -60,9 +59,8 @@ public class TflProvider implements NetworkProvider throw new UnsupportedOperationException(); } - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { throw new UnsupportedOperationException(); } diff --git a/src/de/schildbach/pte/VbbProvider.java b/src/de/schildbach/pte/VbbProvider.java index 1c6fc1f8..c47ae180 100644 --- a/src/de/schildbach/pte/VbbProvider.java +++ b/src/de/schildbach/pte/VbbProvider.java @@ -31,10 +31,10 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Connection; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; @@ -58,7 +58,7 @@ public final class VbbProvider implements NetworkProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.NEARBY_STATIONS || capability == Capability.LOCATION_STATION_ID) + if (capability == Capability.NEARBY_STATIONS) return false; return true; @@ -115,8 +115,8 @@ public final class VbbProvider implements NetworkProvider public static final String STATION_URL_CONNECTION = "http://mobil.bvg.de/Fahrinfo/bin/query.bin/dox"; - private String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products) + private String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products) { final DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yy"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm"); @@ -125,54 +125,10 @@ public final class VbbProvider implements NetworkProvider uri.append("http://mobil.bvg.de/Fahrinfo/bin/query.bin/dox"); uri.append("?REQ0HafasInitialSelection=0"); - // from - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&SID=").append(ParserUtils.urlEncode("A=16@X=" + lon + "@Y=" + lat)); - } - else - { - uri.append("&REQ0JourneyStopsS0A=").append(locationType(fromType)); - uri.append("&REQ0JourneyStopsS0G=").append(ParserUtils.urlEncode(from)); - if (fromType == LocationType.STATION) - uri.append(ParserUtils.urlEncode("!")); - } - - // via + appendLocationVbb(uri, from, "S0", "SID"); + appendLocationVbb(uri, to, "Z0", "ZID"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - // FIXME - throw new UnsupportedOperationException(); - } - else - { - uri.append("&REQ0JourneyStops1A=").append(locationType(viaType)); - uri.append("&REQ0JourneyStops1G=").append(ParserUtils.urlEncode(via)); - if (viaType == LocationType.STATION) - uri.append(ParserUtils.urlEncode("!")); - } - } - - // to - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&ZID=").append(ParserUtils.urlEncode("A=16@X=" + lon + "@Y=" + lat)); - } - else - { - uri.append("&REQ0JourneyStopsZ0A=").append(locationType(toType)); - uri.append("&REQ0JourneyStopsZ0G=").append(ParserUtils.urlEncode(to)); - if (toType == LocationType.STATION) - uri.append(ParserUtils.urlEncode("!")); - } + appendLocationVbb(uri, via, "1", null); uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); uri.append("&REQ0JourneyDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); @@ -194,23 +150,44 @@ public final class VbbProvider implements NetworkProvider uri.append("&vw=3"); if (p == 'F') uri.append("&vw=7"); - if (p == 'C') - ; // FIXME + // FIXME if (p == 'C') } uri.append("&start=Suchen"); return uri.toString(); } - private static int locationType(final LocationType locationType) + private static final void appendLocationVbb(final StringBuilder uri, final Location location, final String paramSuffix, final String paramWgs) { - if (locationType == LocationType.STATION) + if (location.type == LocationType.ADDRESS && location.lat != 0 && location.lon != 0 && paramWgs != null) + { + uri.append("&").append(paramWgs).append("=").append(ParserUtils.urlEncode("A=16@X=" + location.lon + "@Y=" + location.lat)); + } + else + { + uri.append("&REQ0JourneyStops").append(paramSuffix).append("A=").append(locationTypeValue(location)); + uri.append("&REQ0JourneyStops").append(paramSuffix).append("G=").append(ParserUtils.urlEncode(locationValue(location))); + } + } + + private static final int locationTypeValue(final Location location) + { + final LocationType type = location.type; + if (type == LocationType.STATION) return 1; - if (locationType == LocationType.ADDRESS) + if (type == LocationType.ADDRESS) return 2; - if (locationType == LocationType.ANY) + if (type == LocationType.ANY) return 255; - throw new IllegalArgumentException(locationType.toString()); + throw new IllegalArgumentException(type.toString()); + } + + private static final String locationValue(final Location location) + { + if (location.type == LocationType.STATION && location.id != 0) + return Integer.toString(location.id); + else + return location.name; } private static final Pattern P_CHECK_ADDRESS = Pattern.compile("]*>\\s*(.*?)\\s*", Pattern.DOTALL); @@ -219,11 +196,11 @@ public final class VbbProvider implements NetworkProvider private static final Pattern P_CHECK_CONNECTIONS_ERROR = Pattern .compile("(zu dicht beieinander|mehrfach vorhanden oder identisch)|(keine Verbindung gefunden)|(derzeit nur Auskünfte vom)"); - public QueryConnectionsResult queryConnections(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, String products, final WalkSpeed walkSpeed) - throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { - final String uri = connectionsQueryUri(fromType, from, viaType, via, toType, to, date, dep, products); + final String uri = connectionsQueryUri(from, via, to, date, dep, products); + System.out.println(uri); final CharSequence page = ParserUtils.scrape(uri); final Matcher mError = P_CHECK_CONNECTIONS_ERROR.matcher(page); diff --git a/src/de/schildbach/pte/VgsProvider.java b/src/de/schildbach/pte/VgsProvider.java index 30662bb6..e3846df4 100644 --- a/src/de/schildbach/pte/VgsProvider.java +++ b/src/de/schildbach/pte/VgsProvider.java @@ -28,10 +28,9 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.GetConnectionDetailsResult; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; import de.schildbach.pte.dto.QueryDeparturesResult.Status; @@ -242,8 +241,8 @@ public class VgsProvider extends AbstractHafasProvider return 0; } - public QueryConnectionsResult queryConnections(LocationType fromType, String from, LocationType viaType, String via, LocationType toType, - String to, Date date, boolean dep, String products, WalkSpeed walkSpeed) throws IOException + public QueryConnectionsResult queryConnections(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) throws IOException { throw new UnsupportedOperationException(); } diff --git a/src/de/schildbach/pte/VrnProvider.java b/src/de/schildbach/pte/VrnProvider.java index 8bc6b8d5..f5289a71 100644 --- a/src/de/schildbach/pte/VrnProvider.java +++ b/src/de/schildbach/pte/VrnProvider.java @@ -20,7 +20,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.util.ParserUtils; /** @@ -34,8 +34,7 @@ public class VrnProvider extends AbstractEfaProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS || capability == Capability.LOCATION_STATION_ID - || capability == Capability.LOCATION_WGS84) + if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS) return true; return false; @@ -79,8 +78,8 @@ public class VrnProvider extends AbstractEfaProvider } @Override - protected String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + protected String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HHmm"); @@ -93,50 +92,10 @@ public class VrnProvider extends AbstractEfaProvider uri.append("&outputFormat=XML"); uri.append("&coordOutputFormat=WGS84"); - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_origin=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_origin=coord"); - } - else - { - uri.append("&type_origin=").append(locationTypeValue(fromType)); - uri.append("&name_origin=").append(ParserUtils.urlEncode(from, "ISO-8859-1")); // fine-grained location - } - - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_destination=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_destination=coord"); - } - else - { - uri.append("&type_destination=").append(locationTypeValue(toType)); - uri.append("&name_destination=").append(ParserUtils.urlEncode(to, "ISO-8859-1")); // fine-grained location - } - + appendLocation(uri, from, "origin"); + appendLocation(uri, to, "destination"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - final String[] parts = via.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_via=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_via=coord"); - } - else - { - uri.append("&type_via=").append(locationTypeValue(viaType)); - uri.append("&name_via=").append(ParserUtils.urlEncode(via, "ISO-8859-1")); - } - } + appendLocation(uri, via, "via"); uri.append("&itdDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&itdTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); diff --git a/src/de/schildbach/pte/VrrProvider.java b/src/de/schildbach/pte/VrrProvider.java index 75dd5570..957d44d4 100644 --- a/src/de/schildbach/pte/VrrProvider.java +++ b/src/de/schildbach/pte/VrrProvider.java @@ -20,7 +20,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import de.schildbach.pte.dto.LocationType; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.util.ParserUtils; /** @@ -34,8 +34,7 @@ public class VrrProvider extends AbstractEfaProvider public boolean hasCapabilities(final Capability... capabilities) { for (final Capability capability : capabilities) - if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS || capability == Capability.LOCATION_STATION_ID - || capability == Capability.LOCATION_WGS84) + if (capability == Capability.DEPARTURES || capability == Capability.CONNECTIONS) return true; return false; @@ -78,8 +77,8 @@ public class VrrProvider extends AbstractEfaProvider } @Override - protected String connectionsQueryUri(final LocationType fromType, final String from, final LocationType viaType, final String via, - final LocationType toType, final String to, final Date date, final boolean dep, final String products, final WalkSpeed walkSpeed) + protected String connectionsQueryUri(final Location from, final Location via, final Location to, final Date date, final boolean dep, + final String products, final WalkSpeed walkSpeed) { final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); final DateFormat TIME_FORMAT = new SimpleDateFormat("HHmm"); @@ -92,50 +91,10 @@ public class VrrProvider extends AbstractEfaProvider uri.append("&outputFormat=XML"); uri.append("&coordOutputFormat=WGS84"); - if (fromType == LocationType.WGS84) - { - final String[] parts = from.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_origin=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_origin=coord"); - } - else - { - uri.append("&type_origin=").append(locationTypeValue(fromType)); - uri.append("&name_origin=").append(ParserUtils.urlEncode(from, "ISO-8859-1")); // fine-grained location - } - - if (toType == LocationType.WGS84) - { - final String[] parts = to.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_destination=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_destination=coord"); - } - else - { - uri.append("&type_destination=").append(locationTypeValue(toType)); - uri.append("&name_destination=").append(ParserUtils.urlEncode(to, "ISO-8859-1")); // fine-grained location - } - + appendLocation(uri, from, "origin"); + appendLocation(uri, to, "destination"); if (via != null) - { - if (viaType == LocationType.WGS84) - { - final String[] parts = via.split(",\\s*", 2); - final int lat = Integer.parseInt(parts[0]); - final int lon = Integer.parseInt(parts[1]); - uri.append("&nameInfo_via=").append(String.format("%2.6f:%2.6f", lon / 1E6, lat / 1E6)).append(":WGS84[DD.dddddd]"); - uri.append("&typeInfo_via=coord"); - } - else - { - uri.append("&type_via=").append(locationTypeValue(viaType)); - uri.append("&name_via=").append(ParserUtils.urlEncode(via, "ISO-8859-1")); - } - } + appendLocation(uri, via, "via"); uri.append("&itdDate=").append(ParserUtils.urlEncode(DATE_FORMAT.format(date))); uri.append("&itdTime=").append(ParserUtils.urlEncode(TIME_FORMAT.format(date))); diff --git a/src/de/schildbach/pte/dto/Location.java b/src/de/schildbach/pte/dto/Location.java index 4b944bca..ef339cf5 100644 --- a/src/de/schildbach/pte/dto/Location.java +++ b/src/de/schildbach/pte/dto/Location.java @@ -43,7 +43,7 @@ public final class Location public String toDebugString() { - return "[" + type + " " + id + " '" + name + "']"; + return "[" + type + " " + id + " " + lat + "/" + lon + " '" + name + "']"; } @Override diff --git a/src/de/schildbach/pte/dto/LocationType.java b/src/de/schildbach/pte/dto/LocationType.java index 33454060..ce6e4ec8 100644 --- a/src/de/schildbach/pte/dto/LocationType.java +++ b/src/de/schildbach/pte/dto/LocationType.java @@ -21,5 +21,5 @@ package de.schildbach.pte.dto; */ public enum LocationType { - ANY, STATION, WGS84, ADDRESS, POI + ANY, STATION, POI, ADDRESS } diff --git a/test/de/schildbach/pte/live/BahnProviderLiveTest.java b/test/de/schildbach/pte/live/BahnProviderLiveTest.java index 12a4da37..d61a728d 100644 --- a/test/de/schildbach/pte/live/BahnProviderLiveTest.java +++ b/test/de/schildbach/pte/live/BahnProviderLiveTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import de.schildbach.pte.BahnProvider; import de.schildbach.pte.NetworkProvider.WalkSpeed; import de.schildbach.pte.dto.Connection; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.QueryConnectionsResult; import de.schildbach.pte.dto.QueryDeparturesResult; @@ -34,7 +35,7 @@ import de.schildbach.pte.dto.QueryDeparturesResult; public class BahnProviderLiveTest { private BahnProvider provider = new BahnProvider(); - private static final String ALL_PRODUCTS = "IRSUTBFC"; + protected static final String ALL_PRODUCTS = "IRSUTBFC"; @Test public void departures() throws Exception @@ -46,8 +47,8 @@ public class BahnProviderLiveTest @Test public void shortConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Berlin", null, null, LocationType.ANY, "Leipzig", - new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Berlin"), null, new Location( + LocationType.ANY, 0, 0, 0, "Leipzig"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); for (final Connection connection : result.connections) @@ -58,8 +59,8 @@ public class BahnProviderLiveTest @Test public void slowConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Marienburger Str., Berlin ", null, null, LocationType.ANY, - "Tutzinger-Hof-Platz, Starnberg", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Marienburger Str., Berlin"), null, + new Location(LocationType.ANY, 0, 0, 0, "Tutzinger-Hof-Platz, Starnberg"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); for (final Connection connection : result.connections) @@ -70,8 +71,9 @@ public class BahnProviderLiveTest @Test public void connectionWithFootway() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ADDRESS, "Berlin - Mitte, Unter den Linden 24", null, null, - LocationType.ADDRESS, "Starnberg, Possenhofener Straße 13", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ADDRESS, 0, 0, 0, + "Berlin - Mitte, Unter den Linden 24"), null, new Location(LocationType.ADDRESS, 0, 0, 0, "Starnberg, Possenhofener Straße 13"), + new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); diff --git a/test/de/schildbach/pte/live/GvhProviderLiveTest.java b/test/de/schildbach/pte/live/GvhProviderLiveTest.java index f3e4c9d4..a6be0bcf 100644 --- a/test/de/schildbach/pte/live/GvhProviderLiveTest.java +++ b/test/de/schildbach/pte/live/GvhProviderLiveTest.java @@ -87,8 +87,8 @@ public class GvhProviderLiveTest @Test public void incompleteConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "hann", null, null, LocationType.ANY, "laat", new Date(), - true, ALL_PRODUCTS, WalkSpeed.FAST); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "hann"), null, new Location( + LocationType.ANY, 0, 0, 0, "laat"), new Date(), true, ALL_PRODUCTS, WalkSpeed.FAST); System.out.println(result); } } diff --git a/test/de/schildbach/pte/live/LinzProviderLiveTest.java b/test/de/schildbach/pte/live/LinzProviderLiveTest.java index 24ea4fdf..061a60eb 100644 --- a/test/de/schildbach/pte/live/LinzProviderLiveTest.java +++ b/test/de/schildbach/pte/live/LinzProviderLiveTest.java @@ -79,16 +79,16 @@ public class LinzProviderLiveTest @Test public void incompleteConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "linz", null, null, LocationType.ANY, "gel", new Date(), - true, ALL_PRODUCTS, WalkSpeed.FAST); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "linz"), null, new Location( + LocationType.ANY, 0, 0, 0, "gel"), new Date(), true, ALL_PRODUCTS, WalkSpeed.FAST); System.out.println(result); } @Test public void shortConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.STATION, "Linz Hauptbahnhof", null, null, LocationType.STATION, - "Linz Auwiesen", new Date(), true, ALL_PRODUCTS, WalkSpeed.FAST); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.STATION, 0, 0, 0, "Linz Hauptbahnhof"), null, + new Location(LocationType.STATION, 0, 0, 0, "Linz Auwiesen"), new Date(), true, ALL_PRODUCTS, WalkSpeed.FAST); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -97,38 +97,8 @@ public class LinzProviderLiveTest @Test public void longConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.STATION, "Linz Auwiesen", null, null, LocationType.STATION, - "Linz Hafen", new Date(), true, ALL_PRODUCTS, WalkSpeed.SLOW); - System.out.println(result); - // final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); - // System.out.println(moreResult); - } - - @Test - public void connectionBetweenCoordinates() throws Exception - { - final QueryConnectionsResult result = provider.queryConnections(LocationType.WGS84, "48165238,11577473", null, null, LocationType.WGS84, - "47987199,11326532", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); - System.out.println(result); - // final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); - // System.out.println(moreResult); - } - - @Test - public void connectionBetweenCoordinateAndStation() throws Exception - { - final QueryConnectionsResult result = provider.queryConnections(LocationType.WGS84, "48238341,11478230", null, null, LocationType.ANY, - "Ostbahnhof", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); - System.out.println(result); - // final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); - // System.out.println(moreResult); - } - - @Test - public void connectionBetweenAddresses() throws Exception - { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ADDRESS, "München, Maximilianstr. 1", null, null, - LocationType.ADDRESS, "Starnberg, Jahnstraße 50", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.STATION, 0, 0, 0, "Linz Auwiesen"), null, + new Location(LocationType.STATION, 0, 0, 0, "Linz Hafen"), new Date(), true, ALL_PRODUCTS, WalkSpeed.SLOW); System.out.println(result); // final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); // System.out.println(moreResult); diff --git a/test/de/schildbach/pte/live/MvvProviderLiveTest.java b/test/de/schildbach/pte/live/MvvProviderLiveTest.java index 77239f39..717357cb 100644 --- a/test/de/schildbach/pte/live/MvvProviderLiveTest.java +++ b/test/de/schildbach/pte/live/MvvProviderLiveTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import de.schildbach.pte.MvvProvider; import de.schildbach.pte.NetworkProvider.WalkSpeed; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.QueryConnectionsResult; @@ -37,8 +38,8 @@ public class MvvProviderLiveTest @Test public void shortConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Marienplatz", null, null, LocationType.ANY, "Pasing", - new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Marienplatz"), null, new Location( + LocationType.ANY, 0, 0, 0, "Pasing"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -47,8 +48,8 @@ public class MvvProviderLiveTest @Test public void longConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Starnberg, Arbeitsamt", null, null, LocationType.ANY, - "Ackermannstraße", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Starnberg, Arbeitsamt"), null, + new Location(LocationType.STATION, 0, 0, 0, "Ackermannstraße"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); // seems like there are no more connections all the time } @@ -56,8 +57,8 @@ public class MvvProviderLiveTest @Test public void connectionBetweenCoordinates() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.WGS84, "48165238,11577473", null, null, LocationType.WGS84, - "47987199,11326532", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ADDRESS, 0, 48165238, 11577473, null), null, + new Location(LocationType.ADDRESS, 0, 47987199, 11326532, null), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -66,8 +67,8 @@ public class MvvProviderLiveTest @Test public void connectionBetweenCoordinateAndStation() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.WGS84, "48238341,11478230", null, null, LocationType.ANY, - "Ostbahnhof", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ADDRESS, 0, 48238341, 11478230, null), null, + new Location(LocationType.ANY, 0, 0, 0, "Ostbahnhof"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -76,8 +77,8 @@ public class MvvProviderLiveTest @Test public void connectionBetweenAddresses() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ADDRESS, "München, Maximilianstr. 1", null, null, - LocationType.ADDRESS, "Starnberg, Jahnstraße 50", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ADDRESS, 0, 0, 0, "München, Maximilianstr. 1"), + null, new Location(LocationType.ADDRESS, 0, 0, 0, "Starnberg, Jahnstraße 50"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); diff --git a/test/de/schildbach/pte/live/OebbProviderLiveTest.java b/test/de/schildbach/pte/live/OebbProviderLiveTest.java index 708941a3..ea367760 100644 --- a/test/de/schildbach/pte/live/OebbProviderLiveTest.java +++ b/test/de/schildbach/pte/live/OebbProviderLiveTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import de.schildbach.pte.OebbProvider; import de.schildbach.pte.NetworkProvider.WalkSpeed; +import de.schildbach.pte.dto.Location; import de.schildbach.pte.dto.LocationType; import de.schildbach.pte.dto.NearbyStationsResult; import de.schildbach.pte.dto.QueryConnectionsResult; @@ -46,8 +47,8 @@ public class OebbProviderLiveTest @Test public void shortConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Linz", null, null, LocationType.ANY, "Berlin", new Date(), - true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Linz"), null, new Location( + LocationType.ANY, 0, 0, 0, "Berlin"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -56,8 +57,8 @@ public class OebbProviderLiveTest @Test public void slowConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Ramsen, Zoll", null, null, LocationType.ANY, "Azuga", - new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Ramsen, Zoll"), null, new Location( + LocationType.ANY, 0, 0, 0, "Azuga"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -66,8 +67,8 @@ public class OebbProviderLiveTest @Test public void connectionWithFootway() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Graz, Haselweg", null, null, LocationType.ADDRESS, - "Innsbruck, Gumppstraße 69", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Graz, Haselweg"), null, + new Location(LocationType.ADDRESS, 0, 0, 0, "Innsbruck, Gumppstraße 69"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -76,8 +77,9 @@ public class OebbProviderLiveTest @Test public void connectionWithFootway2() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Wien, Krottenbachstraße 110!", null, null, - LocationType.ADDRESS, "Wien, Meidlinger Hauptstraße 1", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider + .queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Wien, Krottenbachstraße 110!"), null, new Location(LocationType.ADDRESS, + 0, 0, 0, "Wien, Meidlinger Hauptstraße 1"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); diff --git a/test/de/schildbach/pte/live/SbbProviderLiveTest.java b/test/de/schildbach/pte/live/SbbProviderLiveTest.java index 7bb3c55f..2e8b404f 100644 --- a/test/de/schildbach/pte/live/SbbProviderLiveTest.java +++ b/test/de/schildbach/pte/live/SbbProviderLiveTest.java @@ -48,8 +48,8 @@ public class SbbProviderLiveTest @Test public void shortConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Zürich!", null, null, LocationType.ANY, "Bern", - new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Zürich!"), null, new Location( + LocationType.ANY, 0, 0, 0, "Bern"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -58,8 +58,8 @@ public class SbbProviderLiveTest @Test public void slowConnection() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ANY, "Schocherswil, Alte Post!", null, null, LocationType.ANY, - "Laconnex, Mollach", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ANY, 0, 0, 0, "Schocherswil, Alte Post!"), null, + new Location(LocationType.ANY, 0, 0, 0, "Laconnex, Mollach"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult); @@ -68,8 +68,8 @@ public class SbbProviderLiveTest @Test public void connectionWithFootway() throws Exception { - final QueryConnectionsResult result = provider.queryConnections(LocationType.ADDRESS, "Spiez, Seestraße 62", null, null, - LocationType.ADDRESS, "Einsiedeln, Erlenmoosweg 24", new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); + final QueryConnectionsResult result = provider.queryConnections(new Location(LocationType.ADDRESS, 0, 0, 0, "Spiez, Seestraße 62"), null, + new Location(LocationType.ADDRESS, 0, 0, 0, "Einsiedeln, Erlenmoosweg 24"), new Date(), true, ALL_PRODUCTS, WalkSpeed.NORMAL); System.out.println(result); final QueryConnectionsResult moreResult = provider.queryMoreConnections(result.linkLater); System.out.println(moreResult);