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);
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
{
@ -3293,7 +3293,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
ParserUtils.parseIsoDate(serverTime, now.substring(0, 10));
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");
@ -3336,7 +3336,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
final String sessionId = params.get("sessionID");
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;
}

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)
{
@ -523,7 +523,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
pp.nextTag();
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header);
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 Set<Option> options) throws IOException
{
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
if (!from.isIdentified())
{
@ -890,7 +890,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
XmlPullUtil.require(pp, "ResC");
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");
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 Set<Option> options) throws IOException
{
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
if (!from.isIdentified())
{
@ -1537,7 +1537,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
final int version = is.readShortReverse();
if (version != 6 && version != 5)
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
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,
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.
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)
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
{
@ -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);
}
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<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
{
@ -1155,7 +1155,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
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 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_TRIP_ENDPOINT = "/journeyplanner/v2/";
private static final ResultHeader HEADER = new ResultHeader("tsi");
private static final String SERVER_PRODUCT = "tsi";
private static Map<String, Product> TRANSPORT_MODES = new HashMap<String, Product>();
static
@ -215,10 +214,12 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
final List<SuggestedLocation> locations = new ArrayList<SuggestedLocation>();
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)
return new SuggestLocationsResult(HEADER, SuggestLocationsResult.Status.SERVICE_DOWN);
return new SuggestLocationsResult(header, SuggestLocationsResult.Status.SERVICE_DOWN);
JSONArray dataArray = head.getJSONArray("Data");
for (int i = 0; i < dataArray.length(); i++)
@ -231,7 +232,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
locations.add(new SuggestedLocation(location));
}
return new SuggestLocationsResult(HEADER, locations);
return new SuggestLocationsResult(header, locations);
}
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);
try
{
final List<Location> stations = new ArrayList<Location>();
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)
{
return new NearbyLocationsResult(HEADER, status == 300 ? NearbyLocationsResult.Status.INVALID_ID
return new NearbyLocationsResult(header, status == 300 ? NearbyLocationsResult.Status.INVALID_ID
: NearbyLocationsResult.Status.SERVICE_DOWN);
}
@ -320,7 +322,7 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
stations.add(parseJsonTransportLocation(data));
}
return new NearbyLocationsResult(HEADER, stations);
return new NearbyLocationsResult(header, stations);
}
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<Option> options) throws IOException
{
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final List<Location> possibleFroms, possibleTos, possibleVias;
possibleFroms = identifyLocation(from);
@ -652,14 +655,14 @@ public abstract class AbstractTsiProvider extends AbstractNetworkProvider
possibleVias = Collections.singletonList(null);
if (possibleFroms.isEmpty())
return new QueryTripsResult(HEADER, QueryTripsResult.Status.UNKNOWN_FROM);
return new QueryTripsResult(header, QueryTripsResult.Status.UNKNOWN_FROM);
if (possibleTos.isEmpty())
return new QueryTripsResult(HEADER, QueryTripsResult.Status.UNKNOWN_TO);
return new QueryTripsResult(header, QueryTripsResult.Status.UNKNOWN_TO);
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)
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);
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 ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final JSONObject statusObj = head.optJSONObject("Status");
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");
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))
{
return new QueryTripsResult(HEADER, QueryTripsResult.Status.SERVICE_DOWN);
return new QueryTripsResult(header, QueryTripsResult.Status.SERVICE_DOWN);
}
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());
}
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)
{

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)
throws IOException
{
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header);
// 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)
throws IOException
{
final ResultHeader header = new ResultHeader(SERVER_PRODUCT);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT);
final QueryDeparturesResult result = new QueryDeparturesResult(header);
// scrape page

View file

@ -25,23 +25,27 @@ import javax.annotation.Nullable;
import com.google.common.base.MoreObjects;
import de.schildbach.pte.NetworkId;
/**
* @author Andreas Schildbach
*/
public final class ResultHeader implements Serializable
{
public final NetworkId network;
public final String serverProduct;
public final @Nullable String serverVersion;
public final long serverTime;
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.serverVersion = serverVersion;
this.serverTime = serverTime;