mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-13 16:20:34 +00:00
Navitia: Use normalized physical modes instead of commercial modes.
This commit is contained in:
parent
92705c3ab1
commit
9f2b3b57e1
1 changed files with 56 additions and 19 deletions
|
@ -93,9 +93,9 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
BIKE, WALKING
|
BIKE, WALKING
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum CommercialMode
|
private enum PhysicalMode
|
||||||
{
|
{
|
||||||
BUS, TRAIN, TRAM, TRAMWAY, METRO, FERRY, CABLECAR, RAPIDTRANSIT, FUNICULAR, DEFAULT_COMMERCIAL_MODE
|
AIR, BOAT, BUS, BUSRAPIDTRANSIT, COACH, FERRY, FUNICULAR, LOCALTRAIN, LONGDISTANCETRAIN, METRO, RAPIDTRANSIT, SHUTTLE, TAXI, TRAIN, TRAMWAY
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
|
@ -396,7 +396,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
final String linkType = link.getString("type");
|
final String linkType = link.getString("type");
|
||||||
if (linkType.equals("line"))
|
if (linkType.equals("line"))
|
||||||
lineId = link.getString("id");
|
lineId = link.getString("id");
|
||||||
else if (linkType.equals("commercial_mode"))
|
else if (linkType.equals("physical_mode"))
|
||||||
modeId = link.getString("id");
|
modeId = link.getString("id");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,17 +604,21 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
|
|
||||||
private Product parseLineProductFromMode(final String modeId)
|
private Product parseLineProductFromMode(final String modeId)
|
||||||
{
|
{
|
||||||
final String modeType = modeId.replace("commercial_mode:", "");
|
final String modeType = modeId.replace("physical_mode:", "");
|
||||||
final CommercialMode commercialMode = CommercialMode.valueOf(modeType.toUpperCase());
|
final PhysicalMode physicalMode = PhysicalMode.valueOf(modeType.toUpperCase());
|
||||||
|
|
||||||
switch (commercialMode)
|
switch (physicalMode)
|
||||||
{
|
{
|
||||||
case BUS:
|
case BUS:
|
||||||
|
case BUSRAPIDTRANSIT:
|
||||||
|
case COACH:
|
||||||
|
case SHUTTLE:
|
||||||
return Product.BUS;
|
return Product.BUS;
|
||||||
case RAPIDTRANSIT:
|
case RAPIDTRANSIT:
|
||||||
case TRAIN:
|
case TRAIN:
|
||||||
|
case LOCALTRAIN:
|
||||||
|
case LONGDISTANCETRAIN:
|
||||||
return Product.SUBURBAN_TRAIN;
|
return Product.SUBURBAN_TRAIN;
|
||||||
case TRAM:
|
|
||||||
case TRAMWAY:
|
case TRAMWAY:
|
||||||
return Product.TRAM;
|
return Product.TRAM;
|
||||||
case METRO:
|
case METRO:
|
||||||
|
@ -622,9 +626,9 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
case FERRY:
|
case FERRY:
|
||||||
return Product.FERRY;
|
return Product.FERRY;
|
||||||
case FUNICULAR:
|
case FUNICULAR:
|
||||||
case CABLECAR:
|
|
||||||
return Product.CABLECAR;
|
return Product.CABLECAR;
|
||||||
case DEFAULT_COMMERCIAL_MODE:
|
case TAXI:
|
||||||
|
return Product.ON_DEMAND;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unhandled place type: " + modeId);
|
throw new IllegalArgumentException("Unhandled place type: " + modeId);
|
||||||
}
|
}
|
||||||
|
@ -639,7 +643,7 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
if (cachedProduct != null)
|
if (cachedProduct != null)
|
||||||
return cachedProduct;
|
return cachedProduct;
|
||||||
|
|
||||||
final JSONObject mode = line.getJSONObject("commercial_mode");
|
final JSONObject mode = getLinePhysicalMode(lineId);
|
||||||
final String modeId = mode.getString("id");
|
final String modeId = mode.getString("id");
|
||||||
final Product product = parseLineProductFromMode(modeId);
|
final Product product = parseLineProductFromMode(modeId);
|
||||||
|
|
||||||
|
@ -653,6 +657,25 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JSONObject getLinePhysicalMode(final String lineId) throws IOException
|
||||||
|
{
|
||||||
|
final String uri = uri() + "lines/" + ParserUtils.urlEncode(lineId) + "/physical_modes";
|
||||||
|
final CharSequence page = ParserUtils.scrape(uri, authorization);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
final JSONObject head = new JSONObject(page.toString());
|
||||||
|
final JSONArray physicalModes = head.getJSONArray("physical_modes");
|
||||||
|
final JSONObject physicalMode = physicalModes.getJSONObject(0);
|
||||||
|
|
||||||
|
return physicalMode;
|
||||||
|
}
|
||||||
|
catch (final JSONException jsonExc)
|
||||||
|
{
|
||||||
|
throw new ParserException(jsonExc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private LineDestination parseLineDestination(final JSONObject route) throws IOException
|
private LineDestination parseLineDestination(final JSONObject route) throws IOException
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -1049,34 +1072,48 @@ public abstract class AbstractNavitiaProvider extends AbstractNetworkProvider
|
||||||
queryUri.append("&last_section_mode=bike");
|
queryUri.append("&last_section_mode=bike");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set forbidden commercial modes.
|
// Set forbidden physical modes.
|
||||||
if (products != null && !products.equals(Product.ALL))
|
if (products != null && !products.equals(Product.ALL))
|
||||||
{
|
{
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Air");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Boat");
|
||||||
|
if (!products.contains(Product.REGIONAL_TRAIN))
|
||||||
|
{
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Localdistancetrain");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Train");
|
||||||
|
}
|
||||||
if (!products.contains(Product.SUBURBAN_TRAIN))
|
if (!products.contains(Product.SUBURBAN_TRAIN))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:train");
|
queryUri.append("&forbidden_uris[]=physical_mode:Localtrain");
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:rapidtransit");
|
queryUri.append("&forbidden_uris[]=physical_mode:Train");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Rapidtransit");
|
||||||
}
|
}
|
||||||
if (!products.contains(Product.SUBWAY))
|
if (!products.contains(Product.SUBWAY))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:metro");
|
queryUri.append("&forbidden_uris[]=physical_mode:Metro");
|
||||||
}
|
}
|
||||||
if (!products.contains(Product.TRAM))
|
if (!products.contains(Product.TRAM))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:tram");
|
queryUri.append("&forbidden_uris[]=physical_mode:Tramway");
|
||||||
}
|
}
|
||||||
if (!products.contains(Product.BUS))
|
if (!products.contains(Product.BUS))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:bus");
|
queryUri.append("&forbidden_uris[]=physical_mode:Bus");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Busrapidtransit");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Coach");
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Shuttle");
|
||||||
}
|
}
|
||||||
if (!products.contains(Product.FERRY))
|
if (!products.contains(Product.FERRY))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:ferry");
|
queryUri.append("&forbidden_uris[]=physical_mode:Ferry");
|
||||||
}
|
}
|
||||||
if (!products.contains(Product.CABLECAR))
|
if (!products.contains(Product.CABLECAR))
|
||||||
{
|
{
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:funicular");
|
queryUri.append("&forbidden_uris[]=physical_mode:Funicular");
|
||||||
queryUri.append("&forbidden_uris[]=commercial_mode:cablecar");
|
}
|
||||||
|
if (!products.contains(Product.ON_DEMAND))
|
||||||
|
{
|
||||||
|
queryUri.append("&forbidden_uris[]=physical_mode:Taxi");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue