Work around VRR cannot deal with useProxFootSearch=1 on large departure monitor requests.

This commit is contained in:
Andreas Schildbach 2014-08-20 21:16:46 +02:00
parent b7dce8eb97
commit 36e52ae4ee
3 changed files with 34 additions and 6 deletions

View file

@ -90,6 +90,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
private boolean canAcceptPoiId = false; private boolean canAcceptPoiId = false;
private boolean needsSpEncId = false; private boolean needsSpEncId = false;
private boolean includeRegionId = true; private boolean includeRegionId = true;
private boolean xsltDepartureMonitorUseProxFootSearch = true;
private Charset requestUrlEncoding = ISO_8859_1; private Charset requestUrlEncoding = ISO_8859_1;
private String httpReferer = null; private String httpReferer = null;
private String httpRefererTrip = null; private String httpRefererTrip = null;
@ -195,6 +196,11 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
this.includeRegionId = includeRegionId; this.includeRegionId = includeRegionId;
} }
protected void setXsltDepartureMonitorUseProxFootSearch(final boolean xsltDepartureMonitorUseProxFootSearch)
{
this.xsltDepartureMonitorUseProxFootSearch = xsltDepartureMonitorUseProxFootSearch;
}
protected void setUseRouteIndexAsTripId(final boolean useRouteIndexAsTripId) protected void setUseRouteIndexAsTripId(final boolean useRouteIndexAsTripId)
{ {
this.useRouteIndexAsTripId = useRouteIndexAsTripId; this.useRouteIndexAsTripId = useRouteIndexAsTripId;
@ -1404,7 +1410,18 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
+ "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'"); + "' trainType='" + trainType + "' trainNum='" + trainNum + "' trainName='" + trainName + "'");
} }
protected StringBuilder queryDeparturesParameters(final String stationId, final int maxDepartures, final boolean equivs) public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException
{
final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs);
final StringBuilder uri = new StringBuilder(departureMonitorEndpoint);
if (!httpPost)
uri.append(parameters);
return xsltDepartureMonitorRequest(stationId, maxDepartures, equivs);
}
protected StringBuilder xsltDepartureMonitorRequestParameters(final String stationId, final int maxDepartures, final boolean equivs)
{ {
final StringBuilder parameters = new StringBuilder(); final StringBuilder parameters = new StringBuilder();
appendCommonRequestParams(parameters, "XML"); appendCommonRequestParams(parameters, "XML");
@ -1415,6 +1432,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
parameters.append("&mode=direct"); parameters.append("&mode=direct");
parameters.append("&ptOptionsActive=1"); parameters.append("&ptOptionsActive=1");
parameters.append("&deleteAssignedStops_dm=").append(equivs ? '0' : '1'); parameters.append("&deleteAssignedStops_dm=").append(equivs ? '0' : '1');
if (xsltDepartureMonitorUseProxFootSearch)
parameters.append("&useProxFootSearch=").append(equivs ? '1' : '0'); parameters.append("&useProxFootSearch=").append(equivs ? '1' : '0');
parameters.append("&mergeDep=1"); // merge departures parameters.append("&mergeDep=1"); // merge departures
if (maxDepartures > 0) if (maxDepartures > 0)
@ -1423,9 +1441,10 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
return parameters; return parameters;
} }
public QueryDeparturesResult queryDepartures(final String stationId, final int maxDepartures, final boolean equivs) throws IOException private QueryDeparturesResult xsltDepartureMonitorRequest(final String stationId, final int maxDepartures, final boolean equivs)
throws IOException
{ {
final StringBuilder parameters = queryDeparturesParameters(stationId, maxDepartures, equivs); final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs);
final StringBuilder uri = new StringBuilder(departureMonitorEndpoint); final StringBuilder uri = new StringBuilder(departureMonitorEndpoint);
if (!httpPost) if (!httpPost)
@ -1639,7 +1658,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final int maxDepartures, final boolean equivs) throws IOException protected QueryDeparturesResult queryDeparturesMobile(final String stationId, final int maxDepartures, final boolean equivs) throws IOException
{ {
final StringBuilder parameters = queryDeparturesParameters(stationId, maxDepartures, equivs); final StringBuilder parameters = xsltDepartureMonitorRequestParameters(stationId, maxDepartures, equivs);
final StringBuilder uri = new StringBuilder(departureMonitorEndpoint); final StringBuilder uri = new StringBuilder(departureMonitorEndpoint);
if (!httpPost) if (!httpPost)

View file

@ -34,9 +34,10 @@ public class VrrProvider extends AbstractEfaProvider
{ {
super(API_BASE); super(API_BASE);
setUseRouteIndexAsTripId(false);
setIncludeRegionId(false); setIncludeRegionId(false);
setXsltDepartureMonitorUseProxFootSearch(false);
setNeedsSpEncId(true); setNeedsSpEncId(true);
setUseRouteIndexAsTripId(false);
setStyles(STYLES); setStyles(STYLES);
} }

View file

@ -83,6 +83,14 @@ public class VrrProviderLiveTest extends AbstractProviderLiveTest
provider.queryDepartures("22001374", 0, false); // Suedwache provider.queryDepartures("22001374", 0, false); // Suedwache
} }
@Test
public void queryManyDeparturesWithEquivs() throws Exception
{
final QueryDeparturesResult result = provider.queryDepartures("20018235", 200, true);
print(result);
}
@Test @Test
public void suggestLocationsIncomplete() throws Exception public void suggestLocationsIncomplete() throws Exception
{ {