21 package org.matsim.pt.transitSchedule;
23 import java.util.ArrayList;
24 import java.util.LinkedHashMap;
25 import java.util.List;
27 import java.util.Stack;
28 import java.util.concurrent.ConcurrentHashMap;
47 import org.xml.sax.Attributes;
95 if (Constants.STOP_FACILITY.equals(name)) {
96 boolean isBlocking = Boolean.parseBoolean(atts.getValue(Constants.IS_BLOCKING));
100 atts.getValue(Constants.ID),
104 Double.parseDouble(atts.getValue(
"x")),
105 Double.parseDouble(atts.getValue(
"y")))),
107 if (atts.getValue(Constants.LINK_REF_ID) != null) {
111 if (atts.getValue(Constants.NAME) != null) {
112 stop.
setName(this.cache.
get(atts.getValue(Constants.NAME)));
115 }
else if (Constants.TRANSIT_LINE.equals(name)) {
118 if (atts.getValue(Constants.NAME) != null) {
119 this.currentTransitLine.
setName(atts.getValue(Constants.NAME));
122 }
else if (Constants.TRANSIT_ROUTE.equals(name)) {
125 }
else if (Constants.DEPARTURE.equals(name)) {
128 String vehicleRefId = atts.getValue(Constants.VEHICLE_REF_ID);
129 if (vehicleRefId != null) {
132 this.currentTransitRoute.
departures.put(
id, departure);
133 }
else if (Constants.ROUTE_PROFILE.equals(name)) {
134 this.currentRouteProfile =
new TempRoute();
135 }
else if (Constants.LINK.equals(name)) {
136 String linkStr = atts.getValue(Constants.REF_ID);
137 if (!linkStr.contains(
" ")) {
140 String[] links = linkStr.split(
" ");
141 for (
int i = 0; i < links.length; i++) {
145 }
else if (Constants.STOP.equals(name)) {
148 if (facility == null) {
149 throw new RuntimeException(
"no stop/facility with id " + atts.getValue(Constants.REF_ID));
152 String arrival = atts.getValue(Constants.ARRIVAL_OFFSET);
153 String departure = atts.getValue(Constants.DEPARTURE_OFFSET);
154 if (arrival != null) {
157 if (departure != null) {
160 stopBuilder.awaitDepartureTime(Boolean.parseBoolean(atts.getValue(Constants.AWAIT_DEPARTURE)));
161 this.currentTransitRoute.stopBuilders.add(stopBuilder);
166 public void endTag(
final String name,
final String content,
final Stack<String> context) {
167 if (Constants.DESCRIPTION.equals(name) && Constants.TRANSIT_ROUTE.equals(context.peek())) {
169 }
else if (Constants.TRANSPORT_MODE.equals(name)) {
170 this.currentTransitRoute.mode = content.intern();
171 }
else if (Constants.TRANSIT_ROUTE.equals(name)) {
172 List<TransitRouteStop> stops =
new ArrayList<>(this.currentTransitRoute.stopBuilders.size());
173 this.currentTransitRoute.stopBuilders.forEach(stopBuilder -> stops.add(stopBuilder.build()));
175 if (this.currentRouteProfile.firstLinkId != null) {
176 if (this.currentRouteProfile.lastLinkId == null) {
177 this.currentRouteProfile.lastLinkId = this.currentRouteProfile.firstLinkId;
179 route = this.routeFactory.createRoute(
NetworkRoute.class,
this.currentRouteProfile.firstLinkId,
this.currentRouteProfile.lastLinkId);
180 route.
setLinkIds(this.currentRouteProfile.firstLinkId,
this.currentRouteProfile.linkIds,
this.currentRouteProfile.lastLinkId);
187 this.currentTransitLine.
addRoute(transitRoute);
204 List<Id<Link>> linkIds =
new ArrayList<Id<Link>>();
213 if (this.firstLinkId == null) {
214 this.firstLinkId = linkId;
215 }
else if (this.lastLinkId == null) {
216 this.lastLinkId = linkId;
218 this.linkIds.add(this.lastLinkId);
219 this.lastLinkId = linkId;
227 private ConcurrentHashMap<String, String> cache =
new ConcurrentHashMap<String, String>(10000);
236 public String
get(
final String string) {
237 if (
string == null) {
240 String s = cache.putIfAbsent(
string,
string);
TempTransitRoute(final Id< TransitRoute > id)
void addLink(final Id< Link > linkId)
TransitScheduleReaderV1(final Scenario scenario)
void ifDefined(DoubleConsumer action)
Map< Id< TransitStopFacility >, TransitStopFacility > getFacilities()
void addTransitLine(final TransitLine line)
TransitScheduleFactory getFactory()
TransitScheduleReaderV1(final TransitSchedule schedule, final RouteFactories routeFactory)
void addRoute(final TransitRoute transitRoute)
void setDescription(final String description)
void startTag(final String name, final Attributes atts, final Stack< String > context)
TransitLine currentTransitLine
static< T > Id< T > create(final long key, final Class< T > type)
final RouteFactories routeFactory
static final OptionalTime parseOptionalTime(final String time)
static final double parseTime(final String time)
TransitScheduleReaderV1(CoordinateTransformation coordinateTransformation, TransitSchedule schedule, RouteFactories routeFactory)
void setVehicleId(final Id< Vehicle > vehicleId)
RouteFactories getRouteFactories()
Population getPopulation()
void addDeparture(final Departure departure)
TempTransitRoute currentTransitRoute
final Id< TransitRoute > id
final TransitSchedule schedule
abstract TransitLine createTransitLine(final Id< TransitLine > lineId)
Map< Id< Departure >, Departure > departures
void setName(final String name)
final CoordinateTransformation coordinateTransformation
String get(final String string)
abstract TransitStopFacility createTransitStopFacility(final Id< TransitStopFacility > facilityId, final Coord coordinate, final boolean blocksLane)
TransitScheduleReaderV1(final CoordinateTransformation coordinateTransformation, final Scenario scenario)
void setName(final String name)
TempRoute currentRouteProfile
void addStopFacility(final TransitStopFacility stop)
PopulationFactory getFactory()
TransitSchedule getTransitSchedule()
abstract TransitRoute createTransitRoute(final Id< TransitRoute > routeId, final NetworkRoute route, final List< TransitRouteStop > stops, final String mode)
void setLinkIds(final Id< Link > startLinkId, final List< Id< Link >> linkIds, final Id< Link > endLinkId)
void endTag(final String name, final String content, final Stack< String > context)
void setLinkId(final Id< Link > linkId)