Hafas: Declare individual product map for each provider, rather than implementing intToProduct() and setProductBits().

This commit is contained in:
Andreas Schildbach 2015-02-14 21:26:00 +01:00
parent 5048e826dc
commit fb6e71ee2b
27 changed files with 136 additions and 1676 deletions

View file

@ -17,6 +17,7 @@
package de.schildbach.pte; package de.schildbach.pte;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Preconditions.checkState;
@ -30,7 +31,6 @@ import java.io.Reader;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.EnumSet; import java.util.EnumSet;
@ -95,7 +95,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
protected final String stationBoardEndpoint; protected final String stationBoardEndpoint;
protected final String getStopEndpoint; protected final String getStopEndpoint;
protected final String queryEndpoint; protected final String queryEndpoint;
private final int numProductBits; private Product[] productsMap;
private @Nullable String accessId = null; private @Nullable String accessId = null;
private @Nullable String clientType = "ANDROID"; private @Nullable String clientType = "ANDROID";
private Charset jsonGetStopsEncoding; private Charset jsonGetStopsEncoding;
@ -162,21 +162,21 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
} }
public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, final String queryEndpoint,
final String queryEndpoint, final int numProductBits) final Product[] productsMap)
{ {
this(network, stationBoardEndpoint, getStopEndpoint, queryEndpoint, numProductBits, Charsets.ISO_8859_1); this(network, stationBoardEndpoint, getStopEndpoint, queryEndpoint, productsMap, Charsets.ISO_8859_1);
} }
public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, final String queryEndpoint,
final String queryEndpoint, final int numProductBits, final Charset jsonEncoding) final Product[] productsMap, final Charset jsonEncoding)
{ {
super(network); super(network);
this.stationBoardEndpoint = stationBoardEndpoint; this.stationBoardEndpoint = stationBoardEndpoint;
this.getStopEndpoint = getStopEndpoint; this.getStopEndpoint = getStopEndpoint;
this.queryEndpoint = queryEndpoint; this.queryEndpoint = queryEndpoint;
this.numProductBits = numProductBits; this.productsMap = productsMap;
this.jsonGetStopsEncoding = jsonEncoding; this.jsonGetStopsEncoding = jsonEncoding;
this.jsonNearbyLocationsEncoding = jsonEncoding; this.jsonNearbyLocationsEncoding = jsonEncoding;
} }
@ -242,25 +242,52 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
return true; return true;
} }
protected final String allProductsString() protected final CharSequence productsString(final Set<Product> products)
{ {
final StringBuilder allProducts = new StringBuilder(numProductBits); final StringBuilder productsStr = new StringBuilder(productsMap.length);
for (int i = 0; i < numProductBits; i++) for (int i = 0; i < productsMap.length; i++)
allProducts.append('1'); {
return allProducts.toString(); if (productsMap[i] != null && products.contains(productsMap[i]))
productsStr.append('1');
else
productsStr.append('0');
}
return productsStr;
}
protected final CharSequence allProductsString()
{
final StringBuilder productsStr = new StringBuilder(productsMap.length);
for (int i = 0; i < productsMap.length; i++)
productsStr.append('1');
return productsStr;
} }
protected final int allProductsInt() protected final int allProductsInt()
{ {
return (1 << numProductBits) - 1; return (1 << productsMap.length) - 1;
} }
protected Product intToProduct(final int value) protected final Product intToProduct(int value)
{ {
return null; final int allProductsInt = allProductsInt();
} checkArgument(value < allProductsInt, "value " + value + " must be smaller than " + allProductsInt);
protected abstract void setProductBits(StringBuilder productBits, Product product); Product product = null;
for (int i = productsMap.length - 1; i >= 0; i--)
{
final int v = 1 << i;
if (value >= v)
{
if (product != null)
throw new IllegalArgumentException("ambigous value: " + value);
product = productsMap[i];
value -= v;
}
}
checkState(value == 0);
return product;
}
protected static final Pattern P_SPLIT_NAME_FIRST_COMMA = Pattern.compile("([^,]*), (.*)"); protected static final Pattern P_SPLIT_NAME_FIRST_COMMA = Pattern.compile("([^,]*), (.*)");
protected static final Pattern P_SPLIT_NAME_LAST_COMMA = Pattern.compile("(.*), ([^,]*)"); protected static final Pattern P_SPLIT_NAME_LAST_COMMA = Pattern.compile("(.*), ([^,]*)");
@ -779,7 +806,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
protected final QueryTripsResult queryTripsXml(Location from, @Nullable Location via, Location to, final Date date, final boolean dep, protected final QueryTripsResult queryTripsXml(Location from, @Nullable Location via, Location to, final Date date, final boolean dep,
final @Nullable Collection<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Set<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility,
final @Nullable Set<Option> options) throws IOException final @Nullable Set<Option> options) throws IOException
{ {
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
@ -817,18 +844,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final Calendar c = new GregorianCalendar(timeZone); final Calendar c = new GregorianCalendar(timeZone);
c.setTime(date); c.setTime(date);
final StringBuilder productsStr = new StringBuilder(numProductBits); final CharSequence productsStr;
if (products != null) if (products != null)
{ productsStr = productsString(products);
for (int i = 0; i < numProductBits; i++)
productsStr.append('0');
for (final Product p : products)
setProductBits(productsStr, p);
}
else else
{ productsStr = allProductsString();
productsStr.append(allProductsString());
}
final char bikeChar = (options != null && options.contains(Option.BIKE)) ? '1' : '0'; final char bikeChar = (options != null && options.contains(Option.BIKE)) ? '1' : '0';
@ -1373,7 +1393,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
protected void appendQueryTripsBinaryParameters(final StringBuilder uri, final Location from, final @Nullable Location via, final Location to, protected void appendQueryTripsBinaryParameters(final StringBuilder uri, final Location from, final @Nullable Location via, final Location to,
final Date date, final boolean dep, final @Nullable Collection<Product> products, final @Nullable Accessibility accessibility, final Date date, final boolean dep, final @Nullable Set<Product> products, final @Nullable Accessibility accessibility,
final @Nullable Set<Option> options) final @Nullable Set<Option> options)
{ {
uri.append("?start=Suchen"); uri.append("?start=Suchen");
@ -1411,18 +1431,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
appendDateTimeParameters(uri, date, "REQ0JourneyDate", "REQ0JourneyTime"); appendDateTimeParameters(uri, date, "REQ0JourneyDate", "REQ0JourneyTime");
final StringBuilder productsStr = new StringBuilder(numProductBits); final CharSequence productsStr;
if (products != null) if (products != null)
{ productsStr = productsString(products);
for (int i = 0; i < numProductBits; i++)
productsStr.append('0');
for (final Product p : products)
setProductBits(productsStr, p);
}
else else
{ productsStr = allProductsString();
productsStr.append(allProductsString());
}
uri.append("&REQ0JourneyProduct_prod_list_1=").append(productsStr); uri.append("&REQ0JourneyProduct_prod_list_1=").append(productsStr);
if (accessibility != null && accessibility != Accessibility.NEUTRAL) if (accessibility != null && accessibility != Accessibility.NEUTRAL)
@ -1449,7 +1462,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
private final static int QUERY_TRIPS_BINARY_BUFFER_SIZE = 384 * 1024; private final static int QUERY_TRIPS_BINARY_BUFFER_SIZE = 384 * 1024;
protected final QueryTripsResult queryTripsBinary(Location from, @Nullable Location via, Location to, final Date date, final boolean dep, protected final QueryTripsResult queryTripsBinary(Location from, @Nullable Location via, Location to, final Date date, final boolean dep,
final @Nullable Collection<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Set<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility,
final @Nullable Set<Option> options) throws IOException final @Nullable Set<Option> options) throws IOException
{ {
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);

View file

@ -30,88 +30,18 @@ public final class BahnProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://reiseauskunft.bahn.de/bin/"; private static final String API_BASE = "http://reiseauskunft.bahn.de/bin/";
private static final String API_BASE_STATION_BOARD = "http://mobile.bahn.de/bin/mobil/"; private static final String API_BASE_STATION_BOARD = "http://mobile.bahn.de/bin/mobil/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND, null, null,
null, null };
public BahnProvider() public BahnProvider()
{ {
super(NetworkId.DB, API_BASE_STATION_BOARD + "bhftafel.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 14); super(NetworkId.DB, API_BASE_STATION_BOARD + "bhftafel.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
setJsonGetStopsUseWeight(false); setJsonGetStopsUseWeight(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1');
productBits.setCharAt(1, '1');
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1');
productBits.setCharAt(3, '1');
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1');
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1');
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1');
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1');
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1');
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1');
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public Set<Product> defaultProducts() public Set<Product> defaultProducts()
{ {

View file

@ -39,83 +39,18 @@ public final class BvgProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "https://fahrinfo.bvg.de/Fahrinfo/bin/"; private static final String API_BASE = "https://fahrinfo.bvg.de/Fahrinfo/bin/";
private static final String API_BASE_STATION_BOARD = "http://bvg.hafas.de/bin/"; private static final String API_BASE_STATION_BOARD = "http://bvg.hafas.de/bin/";
private static final Product[] PRODUCTS_MAP = { Product.SUBURBAN_TRAIN, Product.SUBWAY, Product.TRAM, Product.BUS, Product.FERRY,
Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN, Product.ON_DEMAND };
public BvgProvider() public BvgProvider()
{ {
super(NetworkId.BVG, API_BASE_STATION_BOARD + "stboard.exe/dn", API_BASE + "ajax-getstop.bin/dny", API_BASE + "query.bin/dn", 8, super(NetworkId.BVG, API_BASE_STATION_BOARD + "stboard.exe/dn", API_BASE + "ajax-getstop.bin/dny", API_BASE + "query.bin/dn", PRODUCTS_MAP,
Charsets.UTF_8); Charsets.UTF_8);
setJsonGetStopsUseWeight(false); setJsonGetStopsUseWeight(false);
setStyles(STYLES); setStyles(STYLES);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.SUBURBAN_TRAIN;
if (value == 2)
return Product.SUBWAY;
if (value == 4)
return Product.TRAM;
if (value == 8)
return Product.BUS;
if (value == 16)
return Product.FERRY;
if (value == 32)
return Product.HIGH_SPEED_TRAIN;
if (value == 64)
return Product.REGIONAL_TRAIN;
if (value == 128)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(5, '1');
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(6, '1');
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(0, '1');
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(1, '1');
}
else if (product == Product.TRAM)
{
productBits.setCharAt(2, '1');
}
else if (product == Product.BUS)
{
productBits.setCharAt(3, '1');
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(7, '1');
}
else if (product == Product.FERRY)
{
productBits.setCharAt(4, '1');
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final Pattern P_SPLIT_NAME_SU = Pattern.compile("(.*?)(?:\\s+\\((S|U|S\\+U)\\))?"); private static final Pattern P_SPLIT_NAME_SU = Pattern.compile("(.*?)(?:\\s+\\((S|U|S\\+U)\\))?");
private static final Pattern P_SPLIT_NAME_BUS = Pattern.compile("(.*?)(\\s+\\[[^\\]]+\\])?"); private static final Pattern P_SPLIT_NAME_BUS = Pattern.compile("(.*?)(\\s+\\[[^\\]]+\\])?");

View file

@ -28,93 +28,19 @@ import de.schildbach.pte.dto.Product;
public class DsbProvider extends AbstractHafasProvider public class DsbProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://mobil.rejseplanen.dk/mobil-bin/"; private static final String API_BASE = "http://mobil.rejseplanen.dk/mobil-bin/";
// http://dk.hafas.de/bin/fat/ // http://dk.hafas.de/bin/fat/
// http://mobil.rejseplanen.dk/mobil-bin/ // http://mobil.rejseplanen.dk/mobil-bin/
// http://www.dsb.dk/Rejseplan/bin/
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.BUS, Product.BUS, Product.BUS, Product.FERRY, Product.SUBWAY };
public DsbProvider() public DsbProvider()
{ {
super(NetworkId.DSB, API_BASE + "stboard.exe/mn", API_BASE + "ajax-getstop.exe/mn", API_BASE + "query.exe/dn", 11); super(NetworkId.DSB, API_BASE + "stboard.exe/mn", API_BASE + "ajax-getstop.exe/mn", API_BASE + "query.exe/dn", PRODUCTS_MAP);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.BUS;
if (value == 256)
return Product.BUS;
if (value == 512)
return Product.FERRY;
if (value == 1024)
return Product.SUBWAY;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Intercity
productBits.setCharAt(1, '1'); // InterCityExpress
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // Regionalzug
productBits.setCharAt(3, '1'); // sonstige Züge
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(10, '1'); // Metro
}
else if (product == Product.TRAM)
{
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
productBits.setCharAt(6, '1'); // ExpressBus
productBits.setCharAt(7, '1'); // Nachtbus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(8, '1'); // Telebus/andere
}
else if (product == Product.FERRY)
{
productBits.setCharAt(9, '1'); // Fähre
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
protected String[] splitStationName(final String name) protected String[] splitStationName(final String name)
{ {

View file

@ -39,51 +39,15 @@ import de.schildbach.pte.dto.QueryTripsResult;
public class EireannProvider extends AbstractHafasProvider public class EireannProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://journeyplanner.buseireann.ie/jp/bin/"; private static final String API_BASE = "http://journeyplanner.buseireann.ie/jp/bin/";
private static final Product[] PRODUCTS_MAP = { null, null, null, Product.BUS };
public EireannProvider() public EireannProvider()
{ {
super(NetworkId.EIREANN, API_BASE + "stboard.exe/en", API_BASE + "ajax-getstop.exe/en", API_BASE + "query.exe/en", 4); super(NetworkId.EIREANN, API_BASE + "stboard.exe/en", API_BASE + "ajax-getstop.exe/en", API_BASE + "query.exe/en", PRODUCTS_MAP);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
} }
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
}
else if (product == Product.REGIONAL_TRAIN)
{
}
else if (product == Product.SUBURBAN_TRAIN)
{
}
else if (product == Product.SUBWAY)
{
}
else if (product == Product.TRAM)
{
}
else if (product == Product.BUS)
{
productBits.setCharAt(3, '1');
}
else if (product == Product.ON_DEMAND)
{
}
else if (product == Product.FERRY)
{
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public QueryTripsResult queryTrips(final Location from, final @Nullable Location via, final Location to, final Date date, final boolean dep, public QueryTripsResult queryTrips(final Location from, final @Nullable Location via, final Location to, final Date date, final boolean dep,
final @Nullable Set<Product> products, final @Nullable Optimize optimize, final @Nullable WalkSpeed walkSpeed, final @Nullable Set<Product> products, final @Nullable Optimize optimize, final @Nullable WalkSpeed walkSpeed,

View file

@ -60,14 +60,13 @@ import de.schildbach.pte.util.ParserUtils;
public class InvgProvider extends AbstractHafasProvider public class InvgProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fpa.invg.de/bin/"; private static final String API_BASE = "http://fpa.invg.de/bin/";
// http://invg.hafas.de/bin/ // http://invg.hafas.de/bin/
private static final Product[] PRODUCTS_MAP = { null, null, null, null, null, null, null, null, null, null };
private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000; private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000;
public InvgProvider() public InvgProvider()
{ {
super(NetworkId.INVG, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.INVG, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setStationBoardCanDoEquivs(false); setStationBoardCanDoEquivs(false);
setStyles(STYLES); setStyles(STYLES);
@ -83,12 +82,6 @@ public class InvgProvider extends AbstractHafasProvider
return super.hasCapability(capability); return super.hasCapability(capability);
} }
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
throw new UnsupportedOperationException();
}
private static final String[] PLACES = { "Ingolstadt", "München" }; private static final String[] PLACES = { "Ingolstadt", "München" };
@Override @Override

View file

@ -38,59 +38,11 @@ import de.schildbach.pte.dto.Product;
public class JetProvider extends AbstractHafasProvider public class JetProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://planner.jet.org.il/bin/"; private static final String API_BASE = "http://planner.jet.org.il/bin/";
private static final Product[] PRODUCTS_MAP = { null, null, Product.TRAM, Product.BUS };
public JetProvider() public JetProvider()
{ {
super(NetworkId.JET, API_BASE + "stboard.bin/yn", API_BASE + "ajax-getstop.bin/yn", API_BASE + "query.bin/yn", 4, Charsets.UTF_8); super(NetworkId.JET, API_BASE + "stboard.bin/yn", API_BASE + "ajax-getstop.bin/yn", API_BASE + "query.bin/yn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 4)
return Product.TRAM;
if (value == 8)
return Product.BUS;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
}
else if (product == Product.REGIONAL_TRAIN)
{
}
else if (product == Product.SUBURBAN_TRAIN)
{
}
else if (product == Product.SUBWAY)
{
}
else if (product == Product.TRAM)
{
productBits.setCharAt(2, '1'); // Stadtbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(3, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
}
else if (product == Product.FERRY)
{
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
@Override @Override

View file

@ -29,80 +29,12 @@ import de.schildbach.pte.dto.Product;
public class LuProvider extends AbstractHafasProvider public class LuProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://mobiliteitszentral.hafas.de/hafas/"; private static final String API_BASE = "http://mobiliteitszentral.hafas.de/hafas/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.REGIONAL_TRAIN, Product.BUS, Product.BUS, Product.BUS, Product.BUS };
public LuProvider() public LuProvider()
{ {
super(NetworkId.LU, API_BASE + "stboard.exe/fn", API_BASE + "ajax-getstop.exe/fn", API_BASE + "query.exe/fn", 9, Charsets.UTF_8); super(NetworkId.LU, API_BASE + "stboard.exe/fn", API_BASE + "ajax-getstop.exe/fn", API_BASE + "query.exe/fn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.HIGH_SPEED_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.BUS;
if (value == 256)
return Product.BUS;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
}
else if (product == Product.TRAM)
{
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1');
productBits.setCharAt(6, '1');
productBits.setCharAt(7, '1');
productBits.setCharAt(8, '1');
}
else if (product == Product.ON_DEMAND)
{
}
else if (product == Product.FERRY)
{
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
@Override @Override

View file

@ -35,72 +35,16 @@ import de.schildbach.pte.util.StringReplaceReader;
public class NasaProvider extends AbstractHafasProvider public class NasaProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://reiseauskunft.insa.de/bin/"; private static final String API_BASE = "http://reiseauskunft.insa.de/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.TRAM, Product.BUS, Product.ON_DEMAND };
public NasaProvider() public NasaProvider()
{ {
super(NetworkId.NASA, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 8, Charsets.UTF_8); super(NetworkId.NASA, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setStationBoardHasLocation(true); setStationBoardHasLocation(true);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.TRAM;
if (value == 64)
return Product.BUS;
if (value == 128) // Rufbus
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // ICE
productBits.setCharAt(1, '1'); // IC/EC
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // RE/RB
productBits.setCharAt(7, '1'); // Tourismus-Züge
productBits.setCharAt(2, '1'); // undokumentiert
}
else if (product == Product.SUBURBAN_TRAIN || product == Product.SUBWAY)
{
productBits.setCharAt(4, '1'); // S/U
}
else if (product == Product.TRAM)
{
productBits.setCharAt(5, '1'); // Straßenbahn
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(6, '1'); // Bus
}
else if (product == Product.FERRY || product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
protected String[] splitStationName(final String name) protected String[] splitStationName(final String name)
{ {

View file

@ -36,77 +36,16 @@ import de.schildbach.pte.dto.QueryTripsResult;
public class NriProvider extends AbstractHafasProvider public class NriProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://hafas.websrv05.reiseinfo.no/bin/dev/nri/"; private static final String API_BASE = "http://hafas.websrv05.reiseinfo.no/bin/dev/nri/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN, Product.BUS, Product.TRAM, Product.SUBWAY,
Product.FERRY, Product.FERRY, Product.FERRY };
public NriProvider() public NriProvider()
{ {
super(NetworkId.NRI, API_BASE + "stboard.exe/on", API_BASE + "ajax-getstop.exe/ony", API_BASE + "query.exe/on", 8); super(NetworkId.NRI, API_BASE + "stboard.exe/on", API_BASE + "ajax-getstop.exe/ony", API_BASE + "query.exe/on", PRODUCTS_MAP);
setJsonGetStopsEncoding(Charsets.UTF_8); setJsonGetStopsEncoding(Charsets.UTF_8);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1) // Air
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.REGIONAL_TRAIN;
if (value == 4)
return Product.BUS;
if (value == 8)
return Product.TRAM;
if (value == 16)
return Product.SUBWAY;
if (value == 32)
return Product.FERRY;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.FERRY;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Flugzeug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(1, '1'); // Regionalverkehrszug
productBits.setCharAt(7, '1'); // Tourismus-Züge
productBits.setCharAt(2, '1'); // undokumentiert
}
else if (product == Product.SUBURBAN_TRAIN || product == Product.TRAM)
{
productBits.setCharAt(3, '1'); // Stadtbahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(4, '1'); // U-Bahn
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(2, '1'); // Bus
}
else if (product == Product.FERRY)
{
productBits.setCharAt(5, '1'); // Express-Boot
productBits.setCharAt(6, '1'); // Schiff
productBits.setCharAt(7, '1'); // Fähre
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Oslo", "Bergen" }; private static final String[] PLACES = { "Oslo", "Bergen" };
@Override @Override

View file

@ -33,90 +33,18 @@ import de.schildbach.pte.dto.Product;
public class NsProvider extends AbstractHafasProvider public class NsProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://hafas.bene-system.com/bin/"; private static final String API_BASE = "http://hafas.bene-system.com/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
private static final Pattern HTML_NEARBY_STATIONS_PATTERN = Pattern.compile("<tr bgcolor=\"#(E7EEF9|99BAE4)\">(.*?)</tr>", Pattern.DOTALL); private static final Pattern HTML_NEARBY_STATIONS_PATTERN = Pattern.compile("<tr bgcolor=\"#(E7EEF9|99BAE4)\">(.*?)</tr>", Pattern.DOTALL);
public NsProvider() public NsProvider()
{ {
super(NetworkId.NS, API_BASE + "stboard.exe/nn", API_BASE + "ajax-getstop.exe/nny", API_BASE + "query.exe/nn", 10); super(NetworkId.NS, API_BASE + "stboard.exe/nn", API_BASE + "ajax-getstop.exe/nny", API_BASE + "query.exe/nn", PRODUCTS_MAP);
setHtmlNearbyStationsPattern(HTML_NEARBY_STATIONS_PATTERN); setHtmlNearbyStationsPattern(HTML_NEARBY_STATIONS_PATTERN);
setStationBoardHasLocation(true); setStationBoardHasLocation(true);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // HST
productBits.setCharAt(1, '1'); // IC/EC
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // IR/D
productBits.setCharAt(3, '1');
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1');
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1');
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1');
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1');
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1');
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // boat
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance, public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance,
final int maxLocations) throws IOException final int maxLocations) throws IOException

View file

@ -35,89 +35,13 @@ import de.schildbach.pte.util.StringReplaceReader;
public class NvvProvider extends AbstractHafasProvider public class NvvProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://auskunft.nvv.de/auskunft/bin/jp/"; private static final String API_BASE = "http://auskunft.nvv.de/auskunft/bin/jp/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.SUBURBAN_TRAIN, Product.SUBWAY, Product.TRAM, Product.BUS, Product.BUS, Product.FERRY, Product.ON_DEMAND, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN };
public NvvProvider() public NvvProvider()
{ {
super(NetworkId.NVV, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 12, Charsets.UTF_8); super(NetworkId.NVV, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // ICE
productBits.setCharAt(1, '1'); // IC/EC
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // Regionalzug
productBits.setCharAt(10, '1'); // Zug
productBits.setCharAt(11, '1'); // RegioTram
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(3, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(4, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(5, '1'); // Straßenbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(6, '1'); // Niederflurbus
productBits.setCharAt(7, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // AST/Rufbus
}
else if (product == Product.FERRY)
{
productBits.setCharAt(8, '1'); // Fähre/Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.SUBURBAN_TRAIN;
if (value == 16)
return Product.SUBWAY;
if (value == 32)
return Product.TRAM;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.BUS;
if (value == 256)
return Product.FERRY;
if (value == 512)
return Product.ON_DEMAND;
if (value == 1024)
return Product.REGIONAL_TRAIN;
if (value == 2048)
return Product.REGIONAL_TRAIN;
throw new IllegalArgumentException("cannot handle: " + value);
} }
private static final String[] PLACES = { "Frankfurt (Main)", "Offenbach (Main)", "Mainz", "Wiesbaden", "Marburg", "Kassel", "Hanau", "Göttingen", private static final String[] PLACES = { "Frankfurt (Main)", "Offenbach (Main)", "Mainz", "Wiesbaden", "Marburg", "Kassel", "Hanau", "Göttingen",

View file

@ -35,97 +35,18 @@ import de.schildbach.pte.dto.Product;
public class OebbProvider extends AbstractHafasProvider public class OebbProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fahrplan.oebb.at/bin/"; private static final String API_BASE = "http://fahrplan.oebb.at/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM,
Product.HIGH_SPEED_TRAIN, Product.ON_DEMAND, Product.HIGH_SPEED_TRAIN };
public OebbProvider() public OebbProvider()
{ {
super(NetworkId.OEBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/dn", 13); super(NetworkId.OEBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/dn", PRODUCTS_MAP);
setDominantPlanStopTime(true); setDominantPlanStopTime(true);
setJsonGetStopsEncoding(Charsets.UTF_8); setJsonGetStopsEncoding(Charsets.UTF_8);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.HIGH_SPEED_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.REGIONAL_TRAIN;
if (value == 32)
return Product.SUBURBAN_TRAIN;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.FERRY;
if (value == 256)
return Product.SUBWAY;
if (value == 512)
return Product.TRAM;
if (value == 1024) // Autoreisezug
return Product.HIGH_SPEED_TRAIN;
if (value == 2048)
return Product.ON_DEMAND;
if (value == 4096)
return Product.HIGH_SPEED_TRAIN;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // railjet/ICE
productBits.setCharAt(1, '1'); // ÖBB EC/ÖBB IC
productBits.setCharAt(2, '1'); // EC/IC
productBits.setCharAt(10, '1'); // Autoreisezug
productBits.setCharAt(12, '1'); // westbahn
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // D/EN
productBits.setCharAt(4, '1'); // REX/R
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(5, '1'); // S-Bahnen
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(8, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(9, '1'); // Straßenbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(6, '1'); // Busse
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(11, '1'); // Anrufpflichtige Verkehre
}
else if (product == Product.FERRY)
{
productBits.setCharAt(7, '1'); // Schiffe
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance, public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance,
final int maxLocations) throws IOException final int maxLocations) throws IOException

View file

@ -30,68 +30,12 @@ import de.schildbach.pte.util.StringReplaceReader;
public class PlProvider extends AbstractHafasProvider public class PlProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://rozklad.bilkom.pl/bin/"; private static final String API_BASE = "http://rozklad.bilkom.pl/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.SUBURBAN_TRAIN, Product.BUS, Product.BUS, Product.FERRY };
public PlProvider() public PlProvider()
{ {
super(NetworkId.PL, API_BASE + "stboard.exe/pn", API_BASE + "ajax-getstop.exe/pn", API_BASE + "query.exe/pn", 7, Charsets.UTF_8); super(NetworkId.PL, API_BASE + "stboard.exe/pn", API_BASE + "ajax-getstop.exe/pn", API_BASE + "query.exe/pn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.SUBURBAN_TRAIN;
if (value == 16) // Bus
return Product.BUS;
if (value == 32) // AST, SEV
return Product.BUS;
if (value == 64)
return Product.FERRY;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Kolej dużych prędkości
productBits.setCharAt(1, '1'); // EC/IC/EIC/Ex
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // TLK/IR/RE/D/Posp.
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(3, '1'); // Regio/Osobowe
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(6, '1'); // Metro
}
else if (product == Product.TRAM)
{
productBits.setCharAt(5, '1'); // Tramwaj
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(4, '1'); // Autobus
}
else if (product == Product.FERRY || product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
private static final String[] PLACES = { "Warszawa", "Kraków" }; private static final String[] PLACES = { "Warszawa", "Kraków" };

View file

@ -34,89 +34,17 @@ import de.schildbach.pte.dto.Style.Shape;
public class RsagProvider extends AbstractHafasProvider public class RsagProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fahrplan.rsag-online.de/hafas/"; private static final String API_BASE = "http://fahrplan.rsag-online.de/hafas/";
// http://fahrplanauskunft.verkehrsverbund-warnow.de/bin/ // http://fahrplanauskunft.verkehrsverbund-warnow.de/bin/
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
public RsagProvider() public RsagProvider()
{ {
super(NetworkId.RSAG, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.RSAG, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setStyles(STYLES); setStyles(STYLES);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.HIGH_SPEED_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // ICE, TGV, Thalys, etc.
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // sonstiger Schnellzug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalzug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1'); // Straßenbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anrufverkehre
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Fähre
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Rostock", "Warnemünde" }; private static final String[] PLACES = { "Rostock", "Warnemünde" };
@Override @Override

View file

@ -30,61 +30,17 @@ import de.schildbach.pte.dto.Product;
public class RtProvider extends AbstractHafasProvider public class RtProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://railteam.hafas.de/bin/"; private static final String API_BASE = "http://railteam.hafas.de/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
public RtProvider() public RtProvider()
{ {
super(NetworkId.RT, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.RT, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setJsonNearbyLocationsEncoding(Charsets.ISO_8859_1); setJsonNearbyLocationsEncoding(Charsets.ISO_8859_1);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
} }
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public Set<Product> defaultProducts() public Set<Product> defaultProducts()
{ {

View file

@ -28,81 +28,16 @@ import de.schildbach.pte.dto.Product;
public class SbbProvider extends AbstractHafasProvider public class SbbProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fahrplan.sbb.ch/bin/"; private static final String API_BASE = "http://fahrplan.sbb.ch/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.FERRY, Product.SUBURBAN_TRAIN, Product.BUS, Product.CABLECAR, Product.REGIONAL_TRAIN, Product.TRAM };
public SbbProvider() public SbbProvider()
{ {
super(NetworkId.SBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10); super(NetworkId.SBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.FERRY;
if (value == 32)
return Product.SUBURBAN_TRAIN;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.CABLECAR;
if (value == 256)
return Product.REGIONAL_TRAIN;
if (value == 512)
return Product.TRAM;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // ICE/TGV/IRJ
productBits.setCharAt(1, '1'); // EC/IC
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // IR
productBits.setCharAt(3, '1'); // RE/D
productBits.setCharAt(8, '1'); // ARZ/EXT
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(5, '1'); // S/SN/R
}
else if (product == Product.SUBWAY || product == Product.TRAM)
{
productBits.setCharAt(9, '1'); // Tram/Metro
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(6, '1'); // Bus
}
else if (product == Product.FERRY)
{
productBits.setCharAt(4, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
productBits.setCharAt(7, '1'); // Seilbahn
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public Set<Product> defaultProducts() public Set<Product> defaultProducts()
{ {

View file

@ -32,93 +32,21 @@ import de.schildbach.pte.dto.Product;
public class SeProvider extends AbstractHafasProvider public class SeProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://samtrafiken.hafas.de/bin/"; private static final String API_BASE = "http://samtrafiken.hafas.de/bin/";
// http://reseplanerare.resrobot.se/bin/ // http://reseplanerare.resrobot.se/bin/
// http://api.vasttrafik.se/bin/ // http://api.vasttrafik.se/bin/
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN, Product.BUS,
Product.REGIONAL_TRAIN, Product.SUBWAY, Product.TRAM, Product.BUS, Product.FERRY, Product.FERRY, Product.REGIONAL_TRAIN, null, null,
null };
public SeProvider() public SeProvider()
{ {
super(NetworkId.SE, API_BASE + "stboard.exe/sn", API_BASE + "ajax-getstop.exe/sny", API_BASE + "query.exe/sn", 14, Charsets.UTF_8); super(NetworkId.SE, API_BASE + "stboard.exe/sn", API_BASE + "ajax-getstop.exe/sny", API_BASE + "query.exe/sn", PRODUCTS_MAP, Charsets.UTF_8);
setUseIso8601(true); setUseIso8601(true);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
setStationBoardCanDoEquivs(false); setStationBoardCanDoEquivs(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1) // Flyg
return Product.HIGH_SPEED_TRAIN;
if (value == 2) // X2000
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8) // Expressbus
return Product.BUS;
if (value == 16)
return Product.REGIONAL_TRAIN;
if (value == 32) // Tunnelbana
return Product.SUBWAY;
if (value == 64) // Spårvagn
return Product.TRAM;
if (value == 128)
return Product.BUS;
if (value == 256)
return Product.FERRY;
if (value == 512) // Länstaxi
return Product.FERRY;
if (value == 1024) // Future
return Product.REGIONAL_TRAIN;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Flyg
productBits.setCharAt(1, '1'); // Snabbtåg
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // Tåg
productBits.setCharAt(4, '1'); // Lokaltåg
}
else if (product == Product.SUBURBAN_TRAIN)
{
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(5, '1'); // Tunnelbana
}
else if (product == Product.TRAM)
{
productBits.setCharAt(6, '1'); // Spårvagn
}
else if (product == Product.BUS)
{
productBits.setCharAt(3, '1'); // Expressbuss
productBits.setCharAt(7, '1'); // Buss
}
else if (product == Product.ON_DEMAND)
{
}
else if (product == Product.FERRY)
{
productBits.setCharAt(8, '1'); // Båt
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final Pattern P_SPLIT_NAME_PAREN = Pattern.compile("(.*) \\((.{3,}?) kn\\)"); private static final Pattern P_SPLIT_NAME_PAREN = Pattern.compile("(.*) \\((.{3,}?) kn\\)");
@Override @Override

View file

@ -57,48 +57,17 @@ import de.schildbach.pte.util.ParserUtils;
public class SeptaProvider extends AbstractHafasProvider public class SeptaProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://airs1.septa.org/bin/"; private static final String API_BASE = "http://airs1.septa.org/bin/";
private static final Product[] PRODUCTS_MAP = { Product.SUBWAY, Product.TRAM, Product.BUS, Product.SUBURBAN_TRAIN };
private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000; private static final long PARSER_DAY_ROLLOVER_THRESHOLD_MS = 12 * 60 * 60 * 1000;
public SeptaProvider() public SeptaProvider()
{ {
super(NetworkId.SEPTA, API_BASE + "stboard.exe/en", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/en", 4); super(NetworkId.SEPTA, API_BASE + "stboard.exe/en", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/en", PRODUCTS_MAP);
setStationBoardCanDoEquivs(false); setStationBoardCanDoEquivs(false);
setTimeZone("EST"); setTimeZone("EST");
} }
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
}
else if (product == Product.REGIONAL_TRAIN || product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(3, '1'); // Regional Rail
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(0, '1'); // Subway
}
else if (product == Product.TRAM)
{
productBits.setCharAt(1, '1'); // Trolley
}
else if (product == Product.BUS)
{
productBits.setCharAt(2, '1'); // Bus
}
else if (product == Product.ON_DEMAND || product == Product.FERRY || product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance, public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, final int maxDistance,
final int maxLocations) throws IOException final int maxLocations) throws IOException

View file

@ -18,13 +18,10 @@
package de.schildbach.pte; package de.schildbach.pte;
import java.io.IOException; import java.io.IOException;
import java.util.EnumSet;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
import de.schildbach.pte.dto.NearbyLocationsResult; import de.schildbach.pte.dto.NearbyLocationsResult;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
@ -34,83 +31,12 @@ import de.schildbach.pte.dto.Product;
public class ShProvider extends AbstractHafasProvider public class ShProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://nah.sh.hafas.de/bin/"; private static final String API_BASE = "http://nah.sh.hafas.de/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
public ShProvider() public ShProvider()
{ {
super(NetworkId.SH, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.SH, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.HIGH_SPEED_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
private static final String[] PLACES = { "Hamburg", "Kiel", "Lübeck", "Flensburg", "Neumünster" }; private static final String[] PLACES = { "Hamburg", "Kiel", "Lübeck", "Flensburg", "Neumünster" };

View file

@ -35,73 +35,19 @@ import de.schildbach.pte.dto.Product;
public class SncbProvider extends AbstractHafasProvider public class SncbProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://www.belgianrail.be/jp/sncb-nmbs-routeplanner/"; private static final String API_BASE = "http://www.belgianrail.be/jp/sncb-nmbs-routeplanner/";
// http://hari.b-rail.be/hafas/bin/ // http://hari.b-rail.be/hafas/bin/
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, null, Product.HIGH_SPEED_TRAIN, null, null, Product.BUS,
Product.REGIONAL_TRAIN, null, Product.SUBWAY, Product.BUS, Product.TRAM, null, null, null, null, null };
public SncbProvider() public SncbProvider()
{ {
super(NetworkId.SNCB, API_BASE + "stboard.exe/nn", API_BASE + "ajax-getstop.exe/nny", API_BASE + "query.exe/nn", 16); super(NetworkId.SNCB, API_BASE + "stboard.exe/nn", API_BASE + "ajax-getstop.exe/nny", API_BASE + "query.exe/nn", PRODUCTS_MAP);
setJsonGetStopsEncoding(Charsets.UTF_8); setJsonGetStopsEncoding(Charsets.UTF_8);
setJsonNearbyLocationsEncoding(Charsets.UTF_8); setJsonNearbyLocationsEncoding(Charsets.UTF_8);
setStationBoardHasLocation(true); setStationBoardHasLocation(true);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.HIGH_SPEED_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.REGIONAL_TRAIN;
if (value == 256)
return Product.SUBWAY;
if (value == 512)
return Product.BUS;
if (value == 1024)
return Product.TRAM;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(2, '1'); // IC/IR/P/ICT
}
else if (product == Product.REGIONAL_TRAIN || product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(6, '1'); // Zug
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(8, '1'); // Metro
}
else if (product == Product.TRAM)
{
productBits.setCharAt(10, '1'); // Stadtbahn
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(5, '1'); // Bus
productBits.setCharAt(9, '1'); // Bus
}
else if (product == Product.FERRY || product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] PLACES = { "Antwerpen", "Gent", "Charleroi", "Liege", "Liège", "Brussel" }; private static final String[] PLACES = { "Antwerpen", "Gent", "Charleroi", "Liege", "Liège", "Brussel" };
@Override @Override

View file

@ -32,79 +32,18 @@ import de.schildbach.pte.dto.Style.Shape;
public class StockholmProvider extends AbstractHafasProvider public class StockholmProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://reseplanerare.trafiken.nu/bin/"; private static final String API_BASE = "http://reseplanerare.trafiken.nu/bin/";
private static final Product[] PRODUCTS_MAP = { Product.SUBURBAN_TRAIN, Product.SUBWAY, Product.REGIONAL_TRAIN, Product.BUS, Product.BUS,
Product.FERRY, Product.FERRY };
public StockholmProvider() public StockholmProvider()
{ {
super(NetworkId.STOCKHOLM, API_BASE + "stboard.exe/sn", API_BASE + "ajax-getstop.exe/sny", API_BASE + "query.exe/sn", 7); super(NetworkId.STOCKHOLM, API_BASE + "stboard.exe/sn", API_BASE + "ajax-getstop.exe/sny", API_BASE + "query.exe/sn", PRODUCTS_MAP);
setStyles(STYLES); setStyles(STYLES);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
setStationBoardCanDoEquivs(false); setStationBoardCanDoEquivs(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1) // Pendeltåg
return Product.SUBURBAN_TRAIN;
if (value == 2) // Tunnelbana
return Product.SUBWAY;
if (value == 4) // Lokalbanor
return Product.REGIONAL_TRAIN;
if (value == 8) // Bussar
return Product.BUS;
if (value == 16) // Flygbussar
return Product.BUS;
if (value == 32)
return Product.FERRY;
if (value == 64) // Waxholmsbåtar
return Product.FERRY;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // Lokalbanor
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(0, '1'); // Pendeltåg
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(1, '1'); // Tunnelbana
}
else if (product == Product.TRAM)
{
}
else if (product == Product.BUS)
{
productBits.setCharAt(3, '1'); // Bussar
productBits.setCharAt(4, '1'); // Flygbussar
}
else if (product == Product.ON_DEMAND)
{
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Waxholmsbåtar
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
protected String[] splitStationName(final String name) protected String[] splitStationName(final String name)
{ {

View file

@ -33,77 +33,18 @@ import de.schildbach.pte.dto.Product;
public class VbbProvider extends AbstractHafasProvider public class VbbProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fahrinfo.vbb.de/bin/"; private static final String API_BASE = "http://fahrinfo.vbb.de/bin/";
private static final Set<Product> ALL_EXCEPT_HIGHSPEED_AND_ONDEMAND = EnumSet.complementOf(EnumSet private static final Product[] PRODUCTS_MAP = { Product.SUBURBAN_TRAIN, Product.SUBWAY, Product.TRAM, Product.BUS, Product.FERRY,
.of(Product.HIGH_SPEED_TRAIN, Product.ON_DEMAND)); Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN };
private static final Set<Product> ALL_EXCEPT_HIGHSPEED_AND_ONDEMAND = EnumSet
.complementOf(EnumSet.of(Product.HIGH_SPEED_TRAIN, Product.ON_DEMAND));
public VbbProvider() public VbbProvider()
{ {
super(NetworkId.VBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 7, Charsets.UTF_8); super(NetworkId.VBB, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setJsonGetStopsUseWeight(false); setJsonGetStopsUseWeight(false);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.SUBURBAN_TRAIN;
if (value == 2)
return Product.SUBWAY;
if (value == 4)
return Product.TRAM;
if (value == 8)
return Product.BUS;
if (value == 16)
return Product.FERRY;
if (value == 32)
return Product.HIGH_SPEED_TRAIN;
if (value == 64)
return Product.REGIONAL_TRAIN;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(5, '1');
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(6, '1');
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(0, '1');
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(1, '1');
}
else if (product == Product.TRAM)
{
productBits.setCharAt(2, '1');
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(3, '1');
}
else if (product == Product.FERRY)
{
productBits.setCharAt(4, '1');
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final Pattern P_SPLIT_NAME_SU = Pattern.compile("(.*?)(?:\\s+\\((S|U|S\\+U)\\))?"); private static final Pattern P_SPLIT_NAME_SU = Pattern.compile("(.*?)(?:\\s+\\((S|U|S\\+U)\\))?");
private static final Pattern P_SPLIT_NAME_BUS = Pattern.compile("(.*?)(\\s+\\[[^\\]]+\\])?"); private static final Pattern P_SPLIT_NAME_BUS = Pattern.compile("(.*?)(\\s+\\[[^\\]]+\\])?");

View file

@ -27,83 +27,12 @@ import de.schildbach.pte.dto.Product;
public class VbnProvider extends AbstractHafasProvider public class VbnProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "https://fahrplaner.vbn.de/hafas/"; private static final String API_BASE = "https://fahrplaner.vbn.de/hafas/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
public VbnProvider() public VbnProvider()
{ {
super(NetworkId.VBN, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.VBN, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dny", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1'); // Stadtbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
private static final String[] PLACES = { "Bremen", "Bremerhaven", "Oldenburg(Oldb)", "Osnabrück", "Göttingen" }; private static final String[] PLACES = { "Bremen", "Bremerhaven", "Oldenburg(Oldb)", "Osnabrück", "Göttingen" };

View file

@ -32,61 +32,17 @@ import de.schildbach.pte.dto.Product;
public class VgsProvider extends AbstractHafasProvider public class VgsProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://www.saarfahrplan.de/cgi-bin/"; // http://www.vgs-online.de/cgi-bin/ private static final String API_BASE = "http://www.saarfahrplan.de/cgi-bin/"; // http://www.vgs-online.de/cgi-bin/
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.SUBWAY, Product.TRAM, Product.BUS, Product.CABLECAR, Product.ON_DEMAND,
Product.BUS };
public VgsProvider() public VgsProvider()
{ {
super(NetworkId.VGS, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 11); super(NetworkId.VGS, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP);
setStationBoardHasStationTable(false); setStationBoardHasStationTable(false);
} }
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
productBits.setCharAt(2, '1'); // Fernverkehrszug
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(3, '1'); // Regionalverkehrszug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(5, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(6, '1'); // Stadtbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(7, '1'); // Bus
productBits.setCharAt(10, '1'); // Schulbus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anruf-Sammel-Taxi
}
else if (product == Product.FERRY)
{
productBits.setCharAt(8, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
@Override @Override
protected String[] splitStationName(final String name) protected String[] splitStationName(final String name)
{ {

View file

@ -33,83 +33,12 @@ import de.schildbach.pte.dto.Product;
public class VsnProvider extends AbstractHafasProvider public class VsnProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://fahrplaner.vsninfo.de/hafas/"; private static final String API_BASE = "http://fahrplaner.vsninfo.de/hafas/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.SUBURBAN_TRAIN, Product.BUS, Product.FERRY, Product.SUBWAY, Product.TRAM, Product.ON_DEMAND };
public VsnProvider() public VsnProvider()
{ {
super(NetworkId.VSN, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.VSN, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
}
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.SUBURBAN_TRAIN;
if (value == 32)
return Product.BUS;
if (value == 64)
return Product.FERRY;
if (value == 128)
return Product.SUBWAY;
if (value == 256)
return Product.TRAM;
if (value == 512)
return Product.ON_DEMAND;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // Hochgeschwindigkeitszug
productBits.setCharAt(1, '1'); // IC/EC
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // sonstiger Schnellzug
productBits.setCharAt(3, '1'); // Regionalzug
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(4, '1'); // S-Bahn
}
else if (product == Product.SUBWAY)
{
productBits.setCharAt(7, '1'); // U-Bahn
}
else if (product == Product.TRAM)
{
productBits.setCharAt(8, '1'); // Straßenbahn
}
else if (product == Product.BUS)
{
productBits.setCharAt(5, '1'); // Bus
}
else if (product == Product.ON_DEMAND)
{
productBits.setCharAt(9, '1'); // Anrufverkehre
}
else if (product == Product.FERRY)
{
productBits.setCharAt(6, '1'); // Schiff
}
else if (product == Product.CABLECAR)
{
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
} }
private static final String[] PLACES = { "Göttingen" }; private static final String[] PLACES = { "Göttingen" };

View file

@ -34,83 +34,16 @@ import de.schildbach.pte.dto.Style.Shape;
public class ZvvProvider extends AbstractHafasProvider public class ZvvProvider extends AbstractHafasProvider
{ {
private static final String API_BASE = "http://online.fahrplan.zvv.ch/bin/"; private static final String API_BASE = "http://online.fahrplan.zvv.ch/bin/";
private static final Product[] PRODUCTS_MAP = { Product.HIGH_SPEED_TRAIN, Product.HIGH_SPEED_TRAIN, Product.REGIONAL_TRAIN,
Product.REGIONAL_TRAIN, Product.FERRY, Product.SUBURBAN_TRAIN, Product.BUS, Product.CABLECAR, Product.SUBWAY, Product.TRAM };
public ZvvProvider() public ZvvProvider()
{ {
super(NetworkId.ZVV, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", 10, Charsets.UTF_8); super(NetworkId.ZVV, API_BASE + "stboard.exe/dn", API_BASE + "ajax-getstop.exe/dn", API_BASE + "query.exe/dn", PRODUCTS_MAP, Charsets.UTF_8);
setStyles(STYLES); setStyles(STYLES);
} }
@Override
protected Product intToProduct(final int value)
{
if (value == 1)
return Product.HIGH_SPEED_TRAIN;
if (value == 2)
return Product.HIGH_SPEED_TRAIN;
if (value == 4)
return Product.REGIONAL_TRAIN;
if (value == 8)
return Product.REGIONAL_TRAIN;
if (value == 16)
return Product.FERRY;
if (value == 32)
return Product.SUBURBAN_TRAIN;
if (value == 64)
return Product.BUS;
if (value == 128)
return Product.CABLECAR;
if (value == 256)
return Product.SUBWAY;
if (value == 512)
return Product.TRAM;
throw new IllegalArgumentException("cannot handle: " + value);
}
@Override
protected void setProductBits(final StringBuilder productBits, final Product product)
{
if (product == Product.HIGH_SPEED_TRAIN)
{
productBits.setCharAt(0, '1'); // ICE/EN/CNL/CIS/ES/MET/NZ/PEN/TGV/THA/X2
productBits.setCharAt(1, '1'); // EuroCity/InterCity/InterCityNight/SuperCity
}
else if (product == Product.REGIONAL_TRAIN)
{
productBits.setCharAt(2, '1'); // InterRegio
productBits.setCharAt(3, '1'); // Schnellzug/RegioExpress
}
else if (product == Product.SUBURBAN_TRAIN)
{
productBits.setCharAt(5, '1'); // S-Bahn/StadtExpress/Eilzug/Regionalzug
}
else if (product == Product.SUBWAY)
{
}
else if (product == Product.TRAM)
{
productBits.setCharAt(9, '1'); // Tram
}
else if (product == Product.BUS || product == Product.ON_DEMAND)
{
productBits.setCharAt(6, '1'); // Postauto/Bus
}
else if (product == Product.FERRY)
{
productBits.setCharAt(4, '1'); // Schiff/Fähre/Dampfschiff
}
else if (product == Product.CABLECAR)
{
productBits.setCharAt(7, '1'); // Luftseilbahn/Standseilbahn/Bergbahn
}
else
{
throw new IllegalArgumentException("cannot handle: " + product);
}
}
private static final String[] OPERATORS = { "SBB", "SZU" }; private static final String[] OPERATORS = { "SBB", "SZU" };
private static final String[] PLACES = { "Zürich", "Winterthur" }; private static final String[] PLACES = { "Zürich", "Winterthur" };