querying for connections uses Location for from, via and to parameters

git-svn-id: https://public-transport-enabler.googlecode.com/svn/trunk@249 0924bc21-9374-b0fa-ee44-9ff1593b38f0
This commit is contained in:
andreas.schildbach 2010-10-09 07:28:52 +00:00
parent 8797d02a4b
commit e282106c00
24 changed files with 308 additions and 557 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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)));

View file

@ -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)));

View file

@ -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("<select name=\"(name_origin|name_destination|name_via)\"[^>]*>(.*?)</select>",
@ -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);

View file

@ -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();
}

View file

@ -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)

View file

@ -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
"<select.*? name=\"(REQ0JourneyStopsS0K|REQ0JourneyStopsZ0K|REQ0JourneyStops1\\.0K)\"[^>]*>\n(.*?)</select>", Pattern.DOTALL);
private static final Pattern P_ADDRESSES = Pattern.compile("<option[^>]*>\\s*([^<\\[]*)(?:\\[[^\\[]*\\])?\\s*</option>", 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);

View file

@ -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&#228;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&#252;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);

View file

@ -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);

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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("<option[^>]*>\\s*(.*?)\\s*</option>", 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&#252;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);

View file

@ -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();
}

View file

@ -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)));

View file

@ -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)));

View file

@ -43,7 +43,7 @@ public final class Location
public String toDebugString()
{
return "[" + type + " " + id + " '" + name + "']";
return "[" + type + " " + id + " " + lat + "/" + lon + " '" + name + "']";
}
@Override

View file

@ -21,5 +21,5 @@ package de.schildbach.pte.dto;
*/
public enum LocationType
{
ANY, STATION, WGS84, ADDRESS, POI
ANY, STATION, POI, ADDRESS
}

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);