diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 43daafdc..6ec449b9 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -732,6 +732,63 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider { } + protected void appendConnectionsQueryUri(final StringBuilder uri, final Location from, final Location via, final Location to, final Date date, + final boolean dep, final String products) + { + uri.append("?start=Suchen"); + + uri.append("&REQ0JourneyStopsS0ID=").append(ParserUtils.urlEncode(locationId(from), ISO_8859_1)); + uri.append("&REQ0JourneyStopsZ0ID=").append(ParserUtils.urlEncode(locationId(to), ISO_8859_1)); + + if (via != null) + { + // workaround, for there does not seem to be a REQ0JourneyStops1.0ID parameter + + uri.append("&REQ0JourneyStops1.0A=").append(locationType(via)); + + if (via.type == LocationType.STATION && via.hasId() && isValidStationId(via.id)) + { + uri.append("&REQ0JourneyStops1.0L=").append(via.id); + } + else if (via.hasLocation()) + { + uri.append("&REQ0JourneyStops1.0X=").append(via.lon); + uri.append("&REQ0JourneyStops1.0Y=").append(via.lat); + if (via.name == null) + uri.append("&REQ0JourneyStops1.0O=").append( + ParserUtils.urlEncode(String.format(Locale.ENGLISH, "%.6f, %.6f", via.lat / 1E6, via.lon / 1E6), ISO_8859_1)); + } + else if (via.name != null) + { + uri.append("&REQ0JourneyStops1.0G=").append(ParserUtils.urlEncode(via.name, ISO_8859_1)); + if (via.type != LocationType.ANY) + uri.append('!'); + } + } + + uri.append("&REQ0HafasSearchForw=").append(dep ? "1" : "0"); + + final Calendar c = new GregorianCalendar(timeZone()); + c.setTime(date); + uri.append("&REQ0JourneyDate=").append( + String.format("%02d.%02d.%02d", c.get(Calendar.DAY_OF_MONTH), c.get(Calendar.MONTH) + 1, c.get(Calendar.YEAR) - 2000)); + uri.append("&REQ0JourneyTime=").append(String.format("%02d:%02d", c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE))); + + final StringBuilder productsStr = new StringBuilder(numProductBits); + if (products != null) + { + for (int i = 0; i < numProductBits; i++) + productsStr.append('0'); + for (final char p : products.toCharArray()) + setProductBits(productsStr, p); + } + else + { + productsStr.append(allProductsString()); + } + uri.append("&REQ0JourneyProduct_prod_list_1=").append(productsStr); + } + public QueryConnectionsResult queryConnections(Location from, Location via, Location to, final Date date, final boolean dep, final int numConnections, final String products, final WalkSpeed walkSpeed, final Accessibility accessibility, final Set