From fb6e71ee2bbf25ba8fcefd0ecd4b7cbc68583858 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 14 Feb 2015 21:26:00 +0100 Subject: [PATCH] Hafas: Declare individual product map for each provider, rather than implementing intToProduct() and setProductBits(). --- .../schildbach/pte/AbstractHafasProvider.java | 95 +++++++++++-------- .../src/de/schildbach/pte/BahnProvider.java | 78 +-------------- .../src/de/schildbach/pte/BvgProvider.java | 71 +------------- .../src/de/schildbach/pte/DsbProvider.java | 82 +--------------- .../de/schildbach/pte/EireannProvider.java | 40 +------- .../src/de/schildbach/pte/InvgProvider.java | 11 +-- .../src/de/schildbach/pte/JetProvider.java | 52 +--------- enabler/src/de/schildbach/pte/LuProvider.java | 74 +-------------- .../src/de/schildbach/pte/NasaProvider.java | 62 +----------- .../src/de/schildbach/pte/NriProvider.java | 67 +------------ enabler/src/de/schildbach/pte/NsProvider.java | 78 +-------------- .../src/de/schildbach/pte/NvvProvider.java | 84 +--------------- .../src/de/schildbach/pte/OebbProvider.java | 87 +---------------- enabler/src/de/schildbach/pte/PlProvider.java | 62 +----------- .../src/de/schildbach/pte/RsagProvider.java | 78 +-------------- enabler/src/de/schildbach/pte/RtProvider.java | 50 +--------- .../src/de/schildbach/pte/SbbProvider.java | 71 +------------- enabler/src/de/schildbach/pte/SeProvider.java | 80 +--------------- .../src/de/schildbach/pte/SeptaProvider.java | 35 +------ enabler/src/de/schildbach/pte/ShProvider.java | 80 +--------------- .../src/de/schildbach/pte/SncbProvider.java | 60 +----------- .../de/schildbach/pte/StockholmProvider.java | 67 +------------ .../src/de/schildbach/pte/VbbProvider.java | 69 +------------- .../src/de/schildbach/pte/VbnProvider.java | 77 +-------------- .../src/de/schildbach/pte/VgsProvider.java | 52 +--------- .../src/de/schildbach/pte/VsnProvider.java | 77 +-------------- .../src/de/schildbach/pte/ZvvProvider.java | 73 +------------- 27 files changed, 136 insertions(+), 1676 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 9ff9463f..8042a659 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -17,6 +17,7 @@ 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.checkState; @@ -30,7 +31,6 @@ import java.io.Reader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.EnumSet; @@ -95,7 +95,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider protected final String stationBoardEndpoint; protected final String getStopEndpoint; protected final String queryEndpoint; - private final int numProductBits; + private Product[] productsMap; private @Nullable String accessId = null; private @Nullable String clientType = "ANDROID"; private Charset jsonGetStopsEncoding; @@ -162,21 +162,21 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider } } - public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, - final String queryEndpoint, final int numProductBits) + public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, final String queryEndpoint, + 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, - final String queryEndpoint, final int numProductBits, final Charset jsonEncoding) + public AbstractHafasProvider(final NetworkId network, final String stationBoardEndpoint, final String getStopEndpoint, final String queryEndpoint, + final Product[] productsMap, final Charset jsonEncoding) { super(network); this.stationBoardEndpoint = stationBoardEndpoint; this.getStopEndpoint = getStopEndpoint; this.queryEndpoint = queryEndpoint; - this.numProductBits = numProductBits; + this.productsMap = productsMap; this.jsonGetStopsEncoding = jsonEncoding; this.jsonNearbyLocationsEncoding = jsonEncoding; } @@ -242,25 +242,52 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider return true; } - protected final String allProductsString() + protected final CharSequence productsString(final Set products) { - final StringBuilder allProducts = new StringBuilder(numProductBits); - for (int i = 0; i < numProductBits; i++) - allProducts.append('1'); - return allProducts.toString(); + final StringBuilder productsStr = new StringBuilder(productsMap.length); + for (int i = 0; i < productsMap.length; i++) + { + 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() { - 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_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, - final @Nullable Collection products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, + final @Nullable Set products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Set