EFA: Parse serverID from <itdRequest>.

This commit is contained in:
Andreas Schildbach 2016-11-07 22:22:14 +01:00
parent a932f98099
commit a844c5bc56
5 changed files with 28 additions and 23 deletions

View file

@ -3141,6 +3141,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
final String serverVersion = XmlPullUtil.attr(pp, "version"); final String serverVersion = XmlPullUtil.attr(pp, "version");
final String now = XmlPullUtil.optAttr(pp, "now", null); final String now = XmlPullUtil.optAttr(pp, "now", null);
final String sessionId = XmlPullUtil.attr(pp, "sessionID"); final String sessionId = XmlPullUtil.attr(pp, "sessionID");
final String serverId = XmlPullUtil.attr(pp, "serverID");
final long serverTime; final long serverTime;
if (now != null) { if (now != null) {
@ -3152,7 +3153,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
serverTime = 0; serverTime = 0;
} }
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, serverVersion, serverTime, sessionId); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, serverVersion, serverId, serverTime,
sessionId);
XmlPullUtil.enter(pp, "itdRequest"); XmlPullUtil.enter(pp, "itdRequest");
@ -3183,11 +3185,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider {
ParserUtils.parseEuropeanTime(serverTime, now.substring(11)); ParserUtils.parseEuropeanTime(serverTime, now.substring(11));
final Map<String, String> params = processPas(pp); final Map<String, String> params = processPas(pp);
final String sessionId = params.get("sessionID");
final String requestId = params.get("requestID"); final String requestId = params.get("requestID");
final String sessionId = params.get("sessionID");
final String serverId = params.get("serverID");
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, null, serverTime.getTimeInMillis(), final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, null, serverId,
new String[] { sessionId, requestId }); serverTime.getTimeInMillis(), new String[] { sessionId, requestId });
return header; return header;
} }

View file

@ -836,7 +836,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider {
final String headErr = head.optString("err", null); final String headErr = head.optString("err", null);
if (headErr != null) if (headErr != null)
throw new RuntimeException(headErr); throw new RuntimeException(headErr);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), null, 0, null);
final JSONArray svcResList = head.getJSONArray("svcResL"); final JSONArray svcResList = head.getJSONArray("svcResL");
checkState(svcResList.length() == 1); checkState(svcResList.length() == 1);
@ -901,7 +901,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider {
final String headErr = head.optString("err", null); final String headErr = head.optString("err", null);
if (headErr != null) if (headErr != null)
throw new RuntimeException(headErr); throw new RuntimeException(headErr);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), null, 0, null);
final QueryDeparturesResult result = new QueryDeparturesResult(header); final QueryDeparturesResult result = new QueryDeparturesResult(header);
final JSONArray svcResList = head.getJSONArray("svcResL"); final JSONArray svcResList = head.getJSONArray("svcResL");
@ -1000,7 +1000,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider {
final String headErr = head.optString("err", null); final String headErr = head.optString("err", null);
if (headErr != null) if (headErr != null)
throw new RuntimeException(headErr); throw new RuntimeException(headErr);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), null, 0, null);
final JSONArray svcResList = head.getJSONArray("svcResL"); final JSONArray svcResList = head.getJSONArray("svcResL");
checkState(svcResList.length() == 1); checkState(svcResList.length() == 1);
@ -1092,7 +1092,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider {
final String headErr = head.optString("err", null); final String headErr = head.optString("err", null);
if (headErr != null) if (headErr != null)
throw new RuntimeException(headErr); throw new RuntimeException(headErr);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, head.getString("ver"), null, 0, null);
final JSONArray svcResList = head.getJSONArray("svcResL"); final JSONArray svcResList = head.getJSONArray("svcResL");
checkState(svcResList.length() == 1); checkState(svcResList.length() == 1);
@ -1516,7 +1516,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(network, SERVER_PRODUCT, product, 0, null); final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, product, null, 0, null);
XmlPullUtil.enter(pp, "ResC"); XmlPullUtil.enter(pp, "ResC");
if (XmlPullUtil.test(pp, "Err")) { if (XmlPullUtil.test(pp, "Err")) {
@ -2168,8 +2168,8 @@ 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: " + bodyPeek); throw new IllegalStateException("unknown version: " + version + ", first chars: " + bodyPeek);
final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, Integer.toString(version), 0, final ResultHeader header = new ResultHeader(network, SERVER_PRODUCT, Integer.toString(version), null,
null); 0, null);
// quick seek for pointers // quick seek for pointers
is.reset(); is.reset();

View file

@ -668,7 +668,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider {
@Override @Override
public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location, public NearbyLocationsResult queryNearbyLocations(final EnumSet<LocationType> types, final Location location,
int maxDistance, final int maxLocations) throws IOException { int maxDistance, final int maxLocations) throws IOException {
final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, null, 0, null);
// Build query uri depending of location type. // Build query uri depending of location type.
final StringBuilder queryUri = new StringBuilder(uri()); final StringBuilder queryUri = new StringBuilder(uri());
@ -739,7 +739,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider {
final int maxDepartures, final boolean equivs) throws IOException { final int maxDepartures, final boolean equivs) throws IOException {
checkNotNull(Strings.emptyToNull(stationId)); checkNotNull(Strings.emptyToNull(stationId));
final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, null, 0, null);
try { try {
final QueryDeparturesResult result = new QueryDeparturesResult(resultHeader, final QueryDeparturesResult result = new QueryDeparturesResult(resultHeader,
@ -863,7 +863,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider {
} }
} }
final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, null, 0, null);
return new SuggestLocationsResult(resultHeader, locations); return new SuggestLocationsResult(resultHeader, locations);
} catch (final JSONException jsonExc) { } catch (final JSONException jsonExc) {
throw new ParserException(jsonExc); throw new ParserException(jsonExc);
@ -875,7 +875,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider {
final Date date, final boolean dep, final @Nullable Set<Product> products, final Date date, final boolean dep, final @Nullable Set<Product> products,
final @Nullable Optimize optimize, final @Nullable WalkSpeed walkSpeed, final @Nullable Optimize optimize, final @Nullable WalkSpeed walkSpeed,
final @Nullable Accessibility accessibility, final @Nullable Set<Option> options) throws IOException { final @Nullable Accessibility accessibility, final @Nullable Set<Option> options) throws IOException {
final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, null, 0, null);
try { try {
if (from != null && from.isIdentified() && to != null && to.isIdentified()) { if (from != null && from.isIdentified() && to != null && to.isIdentified()) {
@ -1044,7 +1044,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider {
@Override @Override
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(network, SERVER_PRODUCT, SERVER_VERSION, 0, null); final ResultHeader resultHeader = new ResultHeader(network, SERVER_PRODUCT, SERVER_VERSION, null, 0, null);
final Context context = (Context) contextObj; final Context context = (Context) contextObj;
final Location from = context.from; final Location from = context.from;

View file

@ -380,8 +380,7 @@ public class VrsProvider extends AbstractNetworkProvider {
final String error = Strings.emptyToNull(head.optString("error", "").trim()); final String error = Strings.emptyToNull(head.optString("error", "").trim());
if (error != null) { if (error != null) {
if (error.equals("Leere Koordinate.") || error.equals("Leere ASS-ID und leere Koordinate")) if (error.equals("Leere Koordinate.") || error.equals("Leere ASS-ID und leere Koordinate"))
return new NearbyLocationsResult(new ResultHeader(NetworkId.VRS, SERVER_PRODUCT, null, 0, null), return new NearbyLocationsResult(new ResultHeader(NetworkId.VRS, SERVER_PRODUCT), locations);
locations);
else if (error.equals("ASS2-Server lieferte leere Antwort.")) else if (error.equals("ASS2-Server lieferte leere Antwort."))
return new NearbyLocationsResult(new ResultHeader(NetworkId.VRS, SERVER_PRODUCT), return new NearbyLocationsResult(new ResultHeader(NetworkId.VRS, SERVER_PRODUCT),
NearbyLocationsResult.Status.SERVICE_DOWN); NearbyLocationsResult.Status.SERVICE_DOWN);
@ -403,7 +402,7 @@ public class VrsProvider extends AbstractNetworkProvider {
} }
serverTime = parseDateTime(timetable.getJSONObject(i).getString("generated")).getTime(); serverTime = parseDateTime(timetable.getJSONObject(i).getString("generated")).getTime();
} }
final ResultHeader header = new ResultHeader(NetworkId.VRS, SERVER_PRODUCT, null, serverTime, null); final ResultHeader header = new ResultHeader(NetworkId.VRS, SERVER_PRODUCT, null, null, serverTime, null);
return new NearbyLocationsResult(header, locations); return new NearbyLocationsResult(header, locations);
} catch (final JSONException x) { } catch (final JSONException x) {
throw new RuntimeException("cannot parse: '" + page + "' on " + uri, x); throw new RuntimeException("cannot parse: '" + page + "' on " + uri, x);
@ -871,7 +870,7 @@ public class VrsProvider extends AbstractNetworkProvider {
changes)); changes));
} }
long serverTime = parseDateTime(head.getString("generated")).getTime(); long serverTime = parseDateTime(head.getString("generated")).getTime();
final ResultHeader header = new ResultHeader(NetworkId.VRS, SERVER_PRODUCT, null, serverTime, null); final ResultHeader header = new ResultHeader(NetworkId.VRS, SERVER_PRODUCT, null, null, serverTime, null);
context.from = from; context.from = from;
context.to = to; context.to = to;
context.via = via; context.via = via;

View file

@ -35,18 +35,20 @@ public final class ResultHeader implements Serializable {
public final NetworkId network; public final NetworkId network;
public final String serverProduct; public final String serverProduct;
public final @Nullable String serverVersion; public final @Nullable String serverVersion;
public final @Nullable String serverName;
public final long serverTime; public final long serverTime;
public final Object context; public final Object context;
public ResultHeader(final NetworkId network, final String serverProduct) { public ResultHeader(final NetworkId network, final String serverProduct) {
this(network, serverProduct, null, 0, null); this(network, serverProduct, null, null, 0, null);
} }
public ResultHeader(final NetworkId network, final String serverProduct, final String serverVersion, public ResultHeader(final NetworkId network, final String serverProduct, final String serverVersion,
final long serverTime, final Object context) { final String serverName, final long serverTime, final Object context) {
this.network = checkNotNull(network); this.network = checkNotNull(network);
this.serverProduct = checkNotNull(serverProduct); this.serverProduct = checkNotNull(serverProduct);
this.serverVersion = serverVersion; this.serverVersion = serverVersion;
this.serverName = serverName;
this.serverTime = serverTime; this.serverTime = serverTime;
this.context = context; this.context = context;
} }
@ -54,6 +56,7 @@ public final class ResultHeader implements Serializable {
@Override @Override
public String toString() { public String toString() {
return MoreObjects.toStringHelper(this).add("serverProduct", serverProduct).add("serverVersion", serverVersion) return MoreObjects.toStringHelper(this).add("serverProduct", serverProduct).add("serverVersion", serverVersion)
.add("serverTime", serverTime).add("context", context).omitNullValues().toString(); .add("serverName", serverName).add("serverTime", serverTime).add("context", context).omitNullValues()
.toString();
} }
} }