Navitia: Use normalized physical modes instead of commercial modes.

This commit is contained in:
Antonio El Khoury 2015-03-01 23:27:56 +01:00 committed by Andreas Schildbach
parent 92705c3ab1
commit 9f2b3b57e1

View file

@ -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");
} }
} }