Include network ID in result header.

This commit is contained in:
Andreas Schildbach 2015-02-09 10:06:35 +01:00
parent cf651676d2
commit 322e7cf8cb
7 changed files with 46 additions and 36 deletions

View file

@ -271,7 +271,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
// System.out.println(parameters); // System.out.println(parameters);
final CharSequence page = ParserUtils.scrape(uri.toString(), httpPost ? parameters.substring(1) : null, Charsets.UTF_8); final CharSequence page = ParserUtils.scrape(uri.toString(), httpPost ? parameters.substring(1) : null, Charsets.UTF_8);
final ResultHeader header = new ResultHeader(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
try try
{ {
@ -3293,7 +3293,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
ParserUtils.parseIsoDate(serverTime, now.substring(0, 10)); ParserUtils.parseIsoDate(serverTime, now.substring(0, 10));
ParserUtils.parseEuropeanTime(serverTime, now.substring(11)); ParserUtils.parseEuropeanTime(serverTime, now.substring(11));
final ResultHeader header = new ResultHeader(SERVER_PRODUCT, serverVersion, serverTime.getTimeInMillis(), sessionId); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, serverVersion, serverTime.getTimeInMillis(), sessionId);
XmlPullUtil.enter(pp, "itdRequest"); XmlPullUtil.enter(pp, "itdRequest");
@ -3336,7 +3336,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final String sessionId = params.get("sessionID"); final String sessionId = params.get("sessionID");
final String requestId = params.get("requestID"); final String requestId = params.get("requestID");
final ResultHeader header = new ResultHeader(SERVER_PRODUCT, null, serverTime.getTimeInMillis(), new String[] { sessionId, requestId }); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, null, serverTime.getTimeInMillis(),
new String[] { sessionId, requestId });
return header; return header;
} }

View file

@ -436,7 +436,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
} }
return new SuggestLocationsResult(new ResultHeader(SERVER_PRODUCT), locations); return new SuggestLocationsResult(new ResultHeader(network, SERVER_PRODUCT), locations);
} }
catch (final JSONException x) catch (final JSONException x)
{ {
@ -523,7 +523,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
pp.nextTag(); pp.nextTag();
final ResultHeader header = new ResultHeader(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header); final QueryDeparturesResult result = new QueryDeparturesResult(header);
if (XmlPullUtil.test(pp, "Err")) if (XmlPullUtil.test(pp, "Err"))
@ -770,7 +770,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final @Nullable Collection<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Collection<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(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
if (!from.isIdentified()) if (!from.isIdentified())
{ {
@ -890,7 +890,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.require(pp, "ResC"); XmlPullUtil.require(pp, "ResC");
final String product = XmlPullUtil.attr(pp, "prod").split(" ")[0]; final String product = XmlPullUtil.attr(pp, "prod").split(" ")[0];
final ResultHeader header = new ResultHeader(SERVER_PRODUCT, product, 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, product, 0, null);
XmlPullUtil.enter(pp, "ResC"); XmlPullUtil.enter(pp, "ResC");
if (XmlPullUtil.test(pp, "Err")) if (XmlPullUtil.test(pp, "Err"))
@ -1441,7 +1441,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final @Nullable Collection<Product> products, final @Nullable WalkSpeed walkSpeed, final @Nullable Accessibility accessibility, final @Nullable Collection<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(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
if (!from.isIdentified()) if (!from.isIdentified())
{ {
@ -1537,7 +1537,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final int version = is.readShortReverse(); final int version = is.readShortReverse();
if (version != 6 && version != 5) if (version != 6 && version != 5)
throw new IllegalStateException("unknown version: " + version + ", first chars: " + firstChars); throw new IllegalStateException("unknown version: " + version + ", first chars: " + firstChars);
final ResultHeader header = new ResultHeader(SERVER_PRODUCT, Integer.toString(version), 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, Integer.toString(version), 0, null);
// quick seek for pointers // quick seek for pointers
is.reset(); is.reset();

View file

@ -763,7 +763,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
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
{ {
final ResultHeader resultHeader = new ResultHeader(SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null);
// Check that Location object has coordinates. // Check that Location object has coordinates.
if (!location.isIdentified()) if (!location.isIdentified())
@ -840,7 +840,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs)
throws IOException throws IOException
{ {
final ResultHeader resultHeader = new ResultHeader(SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null);
try try
{ {
@ -978,7 +978,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
} }
} }
final ResultHeader resultHeader = new ResultHeader(SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null);
return new SuggestLocationsResult(resultHeader, locations); return new SuggestLocationsResult(resultHeader, locations);
} }
catch (final JSONException jsonExc) catch (final JSONException jsonExc)
@ -991,7 +991,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
final @Nullable Set<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 resultHeader = new ResultHeader(SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null);
try try
{ {
@ -1155,7 +1155,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
public QueryTripsResult queryMoreTrips(final QueryTripsContext contextObj, final boolean later) throws IOException public QueryTripsResult queryMoreTrips(final QueryTripsContext contextObj, final boolean later) throws IOException
{ {
final ResultHeader resultHeader = new ResultHeader(SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null);
final Context context = (Context) contextObj; final Context context = (Context) contextObj;
final Location from = context.from; final Location from = context.from;

View file

@ -128,8 +128,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
private static final String DEFAULT_STOPFINDER_ENDPOINT = "/Transport/v2/"; private static final String DEFAULT_STOPFINDER_ENDPOINT = "/Transport/v2/";
private static final String DEFAULT_TRIP_ENDPOINT = "/journeyplanner/v2/"; private static final String DEFAULT_TRIP_ENDPOINT = "/journeyplanner/v2/";
private static final String SERVER_PRODUCT = "tsi";
private static final ResultHeader HEADER = new ResultHeader("tsi");
private static Map<String, Product> TRANSPORT_MODES = new HashMap<String, Product>(); private static Map<String, Product> TRANSPORT_MODES = new HashMap<String, Product>();
static static
@ -215,10 +214,12 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
final List<SuggestedLocation> locations = new ArrayList<SuggestedLocation>(); final List<SuggestedLocation> locations = new ArrayList<SuggestedLocation>();
final JSONObject head = new JSONObject(page.toString()); final JSONObject head = new JSONObject(page.toString());
int status = head.getInt("StatusCode"); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final int status = head.getInt("StatusCode");
if (status != 200) if (status != 200)
return new SuggestLocationsResult(HEADER, SuggestLocationsResult.Status.SERVICE_DOWN); return new SuggestLocationsResult(header, SuggestLocationsResult.Status.SERVICE_DOWN);
JSONArray dataArray = head.getJSONArray("Data"); JSONArray dataArray = head.getJSONArray("Data");
for (int i = 0; i < dataArray.length(); i++) for (int i = 0; i < dataArray.length(); i++)
@ -231,7 +232,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
locations.add(new SuggestedLocation(location)); locations.add(new SuggestedLocation(location));
} }
return new SuggestLocationsResult(HEADER, locations); return new SuggestLocationsResult(header, locations);
} }
catch (final JSONException x) catch (final JSONException x)
{ {
@ -301,15 +302,16 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
final CharSequence page = ParserUtils.scrape(uri.toString(), null, Charsets.UTF_8); final CharSequence page = ParserUtils.scrape(uri.toString(), null, Charsets.UTF_8);
try try
{ {
final List<Location> stations = new ArrayList<Location>(); final List<Location> stations = new ArrayList<Location>();
final JSONObject head = new JSONObject(page.toString()); final JSONObject head = new JSONObject(page.toString());
int status = head.getInt("StatusCode"); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final int status = head.getInt("StatusCode");
if (status != 200) if (status != 200)
{ {
return new NearbyLocationsResult(HEADER, status == 300 ? NearbyLocationsResult.Status.INVALID_ID return new NearbyLocationsResult(header, status == 300 ? NearbyLocationsResult.Status.INVALID_ID
: NearbyLocationsResult.Status.SERVICE_DOWN); : NearbyLocationsResult.Status.SERVICE_DOWN);
} }
@ -320,7 +322,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
stations.add(parseJsonTransportLocation(data)); stations.add(parseJsonTransportLocation(data));
} }
return new NearbyLocationsResult(HEADER, stations); return new NearbyLocationsResult(header, stations);
} }
catch (final JSONException x) catch (final JSONException x)
{ {
@ -641,6 +643,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
final @Nullable Set<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 List<Location> possibleFroms, possibleTos, possibleVias; final List<Location> possibleFroms, possibleTos, possibleVias;
possibleFroms = identifyLocation(from); possibleFroms = identifyLocation(from);
@ -652,14 +655,14 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
possibleVias = Collections.singletonList(null); possibleVias = Collections.singletonList(null);
if (possibleFroms.isEmpty()) if (possibleFroms.isEmpty())
return new QueryTripsResult(HEADER, QueryTripsResult.Status.UNKNOWN_FROM); return new QueryTripsResult(header, QueryTripsResult.Status.UNKNOWN_FROM);
if (possibleTos.isEmpty()) if (possibleTos.isEmpty())
return new QueryTripsResult(HEADER, QueryTripsResult.Status.UNKNOWN_TO); return new QueryTripsResult(header, QueryTripsResult.Status.UNKNOWN_TO);
if (possibleVias.isEmpty()) if (possibleVias.isEmpty())
return new QueryTripsResult(HEADER, QueryTripsResult.Status.UNKNOWN_VIA); return new QueryTripsResult(header, QueryTripsResult.Status.UNKNOWN_VIA);
if (possibleFroms.size() > 1 || possibleVias.size() > 1 || possibleTos.size() > 1) if (possibleFroms.size() > 1 || possibleVias.size() > 1 || possibleTos.size() > 1)
return new QueryTripsResult(HEADER, possibleFroms.size() > 1 ? possibleFroms : null, possibleVias.size() > 1 ? possibleVias : null, return new QueryTripsResult(header, possibleFroms.size() > 1 ? possibleFroms : null, possibleVias.size() > 1 ? possibleVias : null,
possibleTos.size() > 1 ? possibleTos : null); possibleTos.size() > 1 ? possibleTos : null);
final Context context = new Context(possibleFroms.get(0), possibleVias.get(0), possibleTos.get(0), products, walkSpeed, accessibility, final Context context = new Context(possibleFroms.get(0), possibleVias.get(0), possibleTos.get(0), products, walkSpeed, accessibility,
@ -763,23 +766,25 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
{ {
final JSONObject head = new JSONObject(page.toString()); final JSONObject head = new JSONObject(page.toString());
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final JSONObject statusObj = head.optJSONObject("Status"); final JSONObject statusObj = head.optJSONObject("Status");
if (statusObj == null) if (statusObj == null)
{ {
return new QueryTripsResult(HEADER, QueryTripsResult.Status.SERVICE_DOWN); return new QueryTripsResult(header, QueryTripsResult.Status.SERVICE_DOWN);
} }
final String statusStr = statusObj.optString("Code"); final String statusStr = statusObj.optString("Code");
if ("NO_SOLUTION_FOR_REQUEST".equals(statusStr)) if ("NO_SOLUTION_FOR_REQUEST".equals(statusStr))
{ {
return new QueryTripsResult(HEADER, QueryTripsResult.Status.NO_TRIPS); return new QueryTripsResult(header, QueryTripsResult.Status.NO_TRIPS);
} }
if (!"OK".equals(statusStr)) if (!"OK".equals(statusStr))
{ {
return new QueryTripsResult(HEADER, QueryTripsResult.Status.SERVICE_DOWN); return new QueryTripsResult(header, QueryTripsResult.Status.SERVICE_DOWN);
} }
final JSONArray tripArray = head.getJSONObject("trips").getJSONArray("Trip"); final JSONArray tripArray = head.getJSONObject("trips").getJSONArray("Trip");
@ -797,7 +802,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
context.updateLatestDeparture(trips.get(trips.size() - 1).getFirstDepartureTime()); context.updateLatestDeparture(trips.get(trips.size() - 1).getFirstDepartureTime());
} }
return new QueryTripsResult(HEADER, uri.toString(), context.from, context.via, context.to, context, trips); return new QueryTripsResult(header, uri.toString(), context.from, context.via, context.to, context, trips);
} }
catch (final JSONException x) catch (final JSONException x)
{ {

View file

@ -175,7 +175,7 @@ public class InvgProvider extends AbstractHafasProvider
public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs)
throws IOException throws IOException
{ {
final ResultHeader header = new ResultHeader(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header); final QueryDeparturesResult result = new QueryDeparturesResult(header);
// scrape page // scrape page

View file

@ -161,7 +161,7 @@ public class SeptaProvider extends AbstractHafasProvider
public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs) public QueryDeparturesResult queryDepartures(final String stationId, final @Nullable Date time, final int maxDepartures, final boolean equivs)
throws IOException throws IOException
{ {
final ResultHeader header = new ResultHeader(SERVER_PRODUCT); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header); final QueryDeparturesResult result = new QueryDeparturesResult(header);
// scrape page // scrape page

View file

@ -25,23 +25,27 @@ import javax.annotation.Nullable;
import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects;
import de.schildbach.pte.NetworkId;
/** /**
* @author Andreas Schildbach * @author Andreas Schildbach
*/ */
public final class ResultHeader implements Serializable public final class ResultHeader implements Serializable
{ {
public final NetworkId network;
public final String serverProduct; public final String serverProduct;
public final @Nullable String serverVersion; public final @Nullable String serverVersion;
public final long serverTime; public final long serverTime;
public final Object context; public final Object context;
public ResultHeader(final String serverProduct) public ResultHeader(final NetworkId network, final String serverProduct)
{ {
this(serverProduct, null, 0, null); this(network, serverProduct, null, 0, null);
} }
public ResultHeader(final String serverProduct, final String serverVersion, final long serverTime, final Object context) public ResultHeader(final NetworkId network, final String serverProduct, final String serverVersion, final long serverTime, final Object context)
{ {
this.network = checkNotNull(network);
this.serverProduct = checkNotNull(serverProduct); this.serverProduct = checkNotNull(serverProduct);
this.serverVersion = serverVersion; this.serverVersion = serverVersion;
this.serverTime = serverTime; this.serverTime = serverTime;