public void setLine(TransitLine line) { this.line = line; this.vehicleIds = new TreeSet<>(); for (TransitRoute route : this.line.getRoutes().values()) { for (Departure departure : route.getDepartures().values()) { this.vehicleIds.add(departure.getVehicleId()); } } this.nVehicles = this.vehicleIds.size(); }
@Override public void endTag(final String name, final String content, final Stack<String> context) { if (Constants.DESCRIPTION.equals(name) && Constants.TRANSIT_ROUTE.equals(context.peek())) { this.currentTransitRoute.description = content; } else if (Constants.TRANSPORT_MODE.equals(name)) { this.currentTransitRoute.mode = content.intern(); } else if (Constants.TRANSIT_ROUTE.equals(name)) { List<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(this.currentTransitRoute.stops.size()); for (TempStop tStop : this.currentTransitRoute.stops) { TransitRouteStopImpl routeStop = new TransitRouteStopImpl(tStop.stop, tStop.arrival, tStop.departure); stops.add(routeStop); routeStop.setAwaitDepartureTime(tStop.awaitDeparture); } NetworkRoute route = null; if (this.currentRouteProfile.firstLinkId != null) { if (this.currentRouteProfile.lastLinkId == null) { this.currentRouteProfile.lastLinkId = this.currentRouteProfile.firstLinkId; } route = this.routeFactory.createRoute(NetworkRoute.class, this.currentRouteProfile.firstLinkId, this.currentRouteProfile.lastLinkId); route.setLinkIds(this.currentRouteProfile.firstLinkId, this.currentRouteProfile.linkIds, this.currentRouteProfile.lastLinkId); } TransitRoute transitRoute = this.schedule.getFactory().createTransitRoute(this.currentTransitRoute.id, route, stops, this.currentTransitRoute.mode); transitRoute.setDescription(this.currentTransitRoute.description); for (Departure departure : this.currentTransitRoute.departures.values()) { transitRoute.addDeparture(departure); } this.currentTransitLine.addRoute(transitRoute); } }
public VehicleOccupancyCalculator(final TransitSchedule transitSchedule, final Vehicles vehicles, final int timeSlot, final int totalTime) { this.timeSlot = timeSlot; for(TransitLine line:transitSchedule.getTransitLines().values()) for(TransitRoute route:line.getRoutes().values()) { Map<Id<TransitStopFacility>, VehicleOccupancyData> routeMap = new HashMap<Id<TransitStopFacility>, VehicleOccupancyData>(100); vehicleOccupancy.put(new Tuple<Id<TransitLine>, Id<TransitRoute>>(line.getId(), route.getId()), routeMap); for(int s=0; s<route.getStops().size()-1; s++) { routeMap.put(route.getStops().get(s).getStopFacility().getId(), new VehicleOccupancyDataArray((int) (totalTime/timeSlot)+1)); } } this.vehicles = vehicles; }
private void writeTransitLine(final TransitLine line) throws UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<Tuple<String, String>>(1); attributes.add(this.createTuple(Constants.ID, line.getId().toString())); if (line.getName() != null) { attributes.add(this.createTuple(Constants.NAME, line.getName())); } this.writeStartTag(Constants.TRANSIT_LINE, attributes); for (TransitRoute route : line.getRoutes().values()) { writeTransitRoute(route); } this.writeEndTag(Constants.TRANSIT_LINE); }
private void writeTransitLine(final TransitLine line) throws IOException, UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<>(1); attributes.add(createTuple(Constants.ID, line.getId().toString())); if (line.getName() != null) { attributes.add(createTuple(Constants.NAME, line.getName())); } this.writeStartTag(Constants.TRANSIT_LINE, attributes); if (!AttributesUtils.isEmpty(line.getAttributes())) { this.writer.write(NL); this.attributesWriter.writeAttributes("\t\t", this.writer, line.getAttributes()); } for (TransitRoute route : line.getRoutes().values()) { writeTransitRoute(route); } this.writeEndTag(Constants.TRANSIT_LINE); }
private static TransitLine mergeTransitLine(TransitScheduleFactory transitScheduleFactory, TransitLine oldLine) { TransitLine newLine = transitScheduleFactory.createTransitLine(oldLine.getId()); for (TransitRoute transitRoute : oldLine.getRoutes().values()) { String routeHash = getHashForRoute(transitRoute); newLine.addRoute(transitRoute);
public void createNetwork() { List<Tuple<TransitLine, TransitRoute>> toBeRemoved = new LinkedList<Tuple<TransitLine, TransitRoute>>(); for (TransitLine tLine : this.schedule.getTransitLines().values()) { for (TransitRoute tRoute : tLine.getRoutes().values()) { ArrayList<Id<Link>> routeLinks = new ArrayList<Id<Link>>(); TransitRouteStop prevStop = null; for (TransitRouteStop stop : tRoute.getStops()) { Link link = getNetworkLink(prevStop, stop); routeLinks.add(link.getId()); prevStop = stop; } if (routeLinks.size() > 0) { NetworkRoute route = RouteUtils.createNetworkRoute(routeLinks, this.network); tRoute.setRoute(route); } else { System.err.println("Line " + tLine.getId() + " route " + tRoute.getId() + " has less than two stops. Removing this route from schedule."); toBeRemoved.add(new Tuple<TransitLine, TransitRoute>(tLine, tRoute)); } } } for (Tuple<TransitLine, TransitRoute> remove : toBeRemoved) { remove.getFirst().removeRoute(remove.getSecond()); } }
public void testRemoveRoute() { TransitLine tLine = createTransitLine(Id.create("1980", TransitLine.class)); TransitRoute route1 = new TransitRouteImpl(Id.create("11", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); TransitRoute route2 = new TransitRouteImpl(Id.create("5", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); tLine.addRoute(route2); assertEquals(2, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); assertTrue(tLine.removeRoute(route1)); assertEquals(1, tLine.getRoutes().size()); assertNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); assertTrue(tLine.removeRoute(route2)); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); assertEquals(1, tLine.getRoutes().size()); assertFalse(tLine.removeRoute(route2)); assertEquals(1, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); }
line1.getAttributes().putAttribute("color", "like the sky"); line1.getAttributes().putAttribute("operator", "higher being"); line1.addRoute(route1a); schedule.addTransitLine(line1); Assert.assertFalse(AttributesUtils.isEmpty(line1.getAttributes())); Assert.assertEquals("like the sky", line1.getAttributes().getAttribute("color")); Assert.assertEquals("higher being", line1.getAttributes().getAttribute("operator")); TransitRoute route1 = line1.getRoutes().get(Id.create("upwards", TransitRoute.class)); Assert.assertNotNull(route1); Assert.assertFalse(AttributesUtils.isEmpty(route1.getAttributes()));
Id<TransitLine> id = Id.create(atts.getValue(Constants.ID), TransitLine.class); this.currentTransitLine = this.schedule.getFactory().createTransitLine(id); this.currentAttributes = this.currentTransitLine.getAttributes(); if (atts.getValue(Constants.NAME) != null) { this.currentTransitLine.setName(atts.getValue(Constants.NAME));
@Test public void testTransitLineName() { String filename = this.utils.getOutputDirectory() + "schedule.xml"; TransitScheduleFactory builder = new TransitScheduleFactoryImpl(); TransitSchedule schedule = builder.createTransitSchedule(); TransitLine line = builder.createTransitLine(Id.create(1, TransitLine.class)); line.setName("Blue line"); schedule.addTransitLine(line); TransitScheduleWriter writer = new TransitScheduleWriter(schedule); writer.writeFile(filename); TransitScheduleFactory builder2 = new TransitScheduleFactoryImpl(); TransitSchedule schedule2 = builder2.createTransitSchedule(); new TransitScheduleReaderV1(schedule2, new RouteFactories()).readFile(filename); Assert.assertEquals(1, schedule2.getTransitLines().size()); Assert.assertEquals("Blue line", schedule2.getTransitLines().get(Id.create(1, TransitLine.class)).getName()); } }
this.currentTransitLine = schedule.getFactory().createTransitLine(id); if (atts.getValue(Constants.NAME) != null) { this.currentTransitLine.setName(atts.getValue(Constants.NAME));
public void testAddRoute() { TransitLine tLine = createTransitLine(Id.create("0891", TransitLine.class)); TransitRoute route1 = new TransitRouteImpl(Id.create("1", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); TransitRoute route2 = new TransitRouteImpl(Id.create("2", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1); assertEquals(1, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); tLine.addRoute(route2); assertEquals(2, tLine.getRoutes().size()); assertNotNull(tLine.getRoutes().get(route1.getId())); assertNotNull(tLine.getRoutes().get(route2.getId())); }
@Override public void addTransitLine(final TransitLine line) { final Id<TransitLine> id = line.getId(); if (this.transitLines.containsKey(id)) { throw new IllegalArgumentException("There is already a transit line with id " + id.toString()); } this.transitLines.put(id, line); }
private static void printStatistic(TransitSchedule transitSchedule){ int nStops = 0; int nLines = 0; int nRoutes = 0; int nDepartures = 0; nStops = transitSchedule.getFacilities().values().size(); for (TransitLine transitLine : transitSchedule.getTransitLines().values()) { nLines++; for (TransitRoute transitRoute : transitLine.getRoutes().values()) { nRoutes++; nDepartures += transitRoute.getDepartures().size(); } } log.info("Transit schedule stats: " + nStops + " stops, " + nLines + " lines, " + nRoutes + " routes, " + nDepartures + " departures."); }
for (TransitRoute route : line.getRoutes().values()) { ArrayList<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(route.getStops()); int stopCount = stops.size(); TransitRouteStop stop = stops.get(0); if (stop.getDepartureOffset() == Time.UNDEFINED_TIME) { result.addError("Transit line " + line.getId() + ", route " + route.getId() + ": The first stop does not contain any departure offset."); stop = stops.get(i); if (stop.getDepartureOffset() == Time.UNDEFINED_TIME) { result.addError("Transit line " + line.getId() + ", route " + route.getId() + ": Stop " + i + " does not contain any departure offset."); result.addError("Transit line " + line.getId() + ", route " + route.getId() + ": The last stop does not contain any arrival offset."); result.addWarning("Transit line " + line.getId() + ", route " + route.getId() + ": The route has not stops assigned, looks suspicious.");
this.currentTransitLine.addRoute(transitRoute); this.currentTransitRoute = null; } else if (Constants.TRANSIT_LINE.equals(name)) {
public void testAddRouteException() { TransitLine tLine = createTransitLine(Id.create("0891", TransitLine.class)); TransitRoute route1a = new TransitRouteImpl(Id.create("1", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); TransitRoute route1b = new TransitRouteImpl(Id.create("1", TransitRoute.class), null, new ArrayList<TransitRouteStop>(), "bus"); assertEquals(0, tLine.getRoutes().size()); tLine.addRoute(route1a); assertEquals(1, tLine.getRoutes().size()); // try adding a route with same id try { tLine.addRoute(route1b); fail("missing exception."); } catch (IllegalArgumentException e) { log.info("catched expected exception.", e); } // try adding a route a second time try { tLine.addRoute(route1a); fail("missing excetion."); } catch (IllegalArgumentException e) { log.info("catched expected exception. ", e); } }