private Leg getDriverLegIfItIs(final Trip subtrip) { if ( !mainModeIdentifier.identifyMainMode( subtrip.getTripElements() ).equals( JointActingTypes.DRIVER ) ) return null; if ( subtrip.getLegsOnly().size() != 1 ) throw new RuntimeException( "unexpected driver subtrip length: "+subtrip ); return subtrip.getLegsOnly().get( 0 ); }
private static void transmitVehicleInformation( final List<Trip> oldTrips, final List<Trip> newTrips) { assert oldTrips.size() == newTrips.size(); final Iterator<Trip> oldIter = oldTrips.iterator(); final Iterator<Trip> newIter = newTrips.iterator(); while ( oldIter.hasNext() ) { final Trip old = oldIter.next(); final Trip young = newIter.next(); final Id oldVeh = getVehicleId( old ); for (Leg l : young.getLegsOnly()) { if ( !(l.getRoute() instanceof NetworkRoute) ) continue; ((NetworkRoute) l.getRoute()).setVehicleId( oldVeh ); } } }
@Override public void run(final Plan plan) { final List<Id> vehs = new ArrayList<Id>( vehicleRessources.identifyVehiclesUsableForAgent( plan.getPerson().getId() ) ); // make sure order is deterministic Collections.sort( vehs ); final List<Subtour> rootSubtours = getRootSubtoursWithMode( plan ); if ( rootSubtours.isEmpty() ) return; final Subtour toHandle = rootSubtours.get( random.nextInt( rootSubtours.size() ) ); final Id veh = vehs.get( random.nextInt( vehs.size() ) ); for ( Trip t : toHandle.getTrips() ) { if ( !identifyMainMode( t ).equals( mode ) ) continue; for ( Leg l : t.getLegsOnly() ) { if ( !(l.getRoute() instanceof NetworkRoute) ) continue; final NetworkRoute route = (NetworkRoute) l.getRoute(); route.setVehicleId( veh ); } } }
if ( expectedMode.equals( trip.getLegsOnly().get( 0 ).getMode() ) ) { assertTrue( "inconsistent mode chain",
for (Leg leg : trip.getLegsOnly()) {
boolean containsActivityTypePair = distributionClass.activityTypesFromTo.contains(tuple) || distributionClass.activityTypesFromTo.size() == 0; if (containsMainMode && containsActivityTypePair) { for (Leg leg : trip.getLegsOnly()) { if (leg.getMode().equals(mainMode)) { Route route = leg.getRoute();
private static boolean containsCoTraveler( final Plan plan, final Id cotraveler) { for ( Trip t : TripStructureUtils.getTrips( plan , EmptyStageActivityTypes.INSTANCE ) ) { for ( Leg l : t.getLegsOnly() ) { if ( l.getRoute() instanceof DriverRoute ) { if ( ((DriverRoute) l.getRoute()).getPassengersIds().contains( cotraveler ) ) { return true; } } else if ( l.getRoute() instanceof PassengerRoute ) { if ( ((PassengerRoute) l.getRoute()).getDriverId().equals( cotraveler ) ) { return true; } } } } return false; } }
private void processAllocation(final List<SubtourRecord> vehicularTours) { for ( final SubtourRecord r : vehicularTours ) { for ( final Trip t : r.subtour.getTrips() ) { for ( final Leg leg : t.getLegsOnly() ) { if ( !vehicularModes.contains( leg.getMode() ) ) continue; if ( allowNullRoutes && leg.getRoute() == null ) { // this is not so nice... leg.setRoute( new VehicleOnlyNetworkRoute() ); } if ( !( leg.getRoute() instanceof NetworkRoute ) ) { throw new RuntimeException( "route for mode "+leg.getMode()+" has non-network route "+leg.getRoute() ); } ((NetworkRoute) leg.getRoute()).setVehicleId( r.allocatedVehicle ); } } } }
@Test public void testLegs() throws Exception { for (Fixture fixture : fixtures) { final List<Trip> trips = TripStructureUtils.getTrips( fixture.plan, stageActivities); int countLegs = 0; for (Trip trip : trips) { countLegs += trip.getLegsOnly().size(); } assertEquals( "getLegsOnly() does not returns the right number of legs", fixture.expectedNLegs, countLegs); } }
private static Id getVehicleId(final Trip old) { Id id = null; for (Leg l : old.getLegsOnly()) { if ( !(l.getRoute() instanceof NetworkRoute) ) continue; final Id currId = ((NetworkRoute) l.getRoute()).getVehicleId(); // would be more efficient to just return the first found Id, // but there would be a risk of this problem poping up at some // point if ( id != null && !id.equals( currId ) ) { throw new RuntimeException( "cannot handle trips with multiple vehicles, such as "+id+" and "+currId+" in "+l.getRoute() ); } id = currId; } return id; }
private static boolean tripContainsOneOfThoseModes(final Trip trip, final Collection<String> modes) { for ( Leg leg : trip.getLegsOnly() ) { if ( modes.contains( leg.getMode() ) ) return true; } return false; } }
private boolean isVehicular(final Trip t) { // note: checking that getVehicle returns null doen't work // when allowing for null routes. Hence the duplication of the logic... final List<Leg> legs = t.getLegsOnly(); if ( legs.isEmpty() ) return false; // XXX what to do if several legs??? final Leg l = legs.get( 0 ); if ( !vehicularModes.contains( l.getMode() ) ) return false; if ( !allowNullRoutes && l.getRoute() == null ) return false; if ( l.getRoute() != null && !(l.getRoute() instanceof NetworkRoute) ) return false; return true; }
private static Id<Vehicle> getUniqueVehicleId(Trip trip) { Id<Vehicle> vehicleId = null; for (Leg leg : trip.getLegsOnly()) { if (leg.getRoute() instanceof NetworkRoute) { if (vehicleId != null && (!vehicleId.equals(((NetworkRoute) leg.getRoute()).getVehicleId()))) { return null; // The trip uses several vehicles. } vehicleId = ((NetworkRoute) leg.getRoute()).getVehicleId(); } } return vehicleId; }
private Id getVehicle( final Trip t ) { final List<Leg> legs = t.getLegsOnly(); if ( legs.isEmpty() ) return null; // XXX what to do if several legs??? final Leg l = legs.get( 0 ); if ( !vehicularModes.contains( l.getMode() ) ) return null; if ( !allowNullRoutes && l.getRoute() == null ) return null; if ( l.getRoute() != null && !(l.getRoute() instanceof NetworkRoute) ) return null; return ((NetworkRoute) l.getRoute()).getVehicleId(); }
private static boolean containsMode( final Trip trip, final String mode) { for (Leg leg : trip.getLegsOnly()) { if (leg.getMode().equals( mode )) return true; } return false; } }