21 package org.matsim.core.network.io;
23 import java.util.List;
24 import java.util.Stack;
26 import org.apache.logging.log4j.LogManager;
27 import org.apache.logging.log4j.Logger;
36 import org.xml.sax.Attributes;
53 static final String NETWORK_CHANGE_EVENTS_TAG =
"networkChangeEvents";
55 static final String NETWORK_CHANGE_EVENT_TAG =
"networkChangeEvent";
57 static final String START_TIME_TAG =
"startTime";
59 static final String LINK_TAG =
"link";
61 static final String REF_ID_TAG =
"refId";
63 static final String FLOW_CAPACITY_TAG =
"flowCapacity";
65 static final String FREESPEED_TAG =
"freespeed";
67 static final String LANES_TAG =
"lanes";
69 static final String CHANGE_TYPE_TAG =
"type";
71 static final String VALUE_TAG =
"value";
81 private final List<NetworkChangeEvent>
events ;
145 public void endTag(String name, String content, Stack<String> context) {
146 if(name.equalsIgnoreCase(NETWORK_CHANGE_EVENT_TAG)) {
147 this.events.add(this.currentEvent);
148 this.currentEvent = null;
153 public void startTag(String name, Attributes atts, Stack<String> context) {
157 if(name.equalsIgnoreCase(NETWORK_CHANGE_EVENT_TAG)) {
158 String value = atts.getValue(START_TIME_TAG);
162 this.currentEvent = null;
163 log.warn(
"A start time must be defined!");
168 }
else if(name.equalsIgnoreCase(LINK_TAG) && this.currentEvent != null) {
169 String value = atts.getValue(REF_ID_TAG);
173 this.currentEvent.
addLink(link);
175 log.warn(String.format(
"Link %1$s not found!", value));
180 }
else if(name.equalsIgnoreCase(FLOW_CAPACITY_TAG) && this.currentEvent != null) {
182 .getValue(CHANGE_TYPE_TAG), atts.getValue(VALUE_TAG)));
186 }
else if(name.equalsIgnoreCase(FREESPEED_TAG) && this.currentEvent != null) {
188 .getValue(CHANGE_TYPE_TAG), atts.getValue(VALUE_TAG)));
192 }
else if(name.equalsIgnoreCase(LANES_TAG) && this.currentEvent != null) {
194 .getValue(CHANGE_TYPE_TAG), atts.getValue(VALUE_TAG)));
199 static final String ABSOLUTE_VALUE =
"absolute";
200 static final String FACTOR_VALUE =
"scaleFactor";
201 static final String OFFSET_VALUE =
"offset" ;
205 if(typeStr != null && valueStr != null) {
206 double value = Double.parseDouble(valueStr);
207 if(typeStr.equalsIgnoreCase(ABSOLUTE_VALUE))
209 else if(typeStr.equalsIgnoreCase(FACTOR_VALUE))
211 else if(typeStr.equalsIgnoreCase(OFFSET_VALUE))
214 log.warn(String.format(
215 "The change type %1$s is not allowed. Alowed: %2$s %3$s %4$s",
216 typeStr, ABSOLUTE_VALUE, FACTOR_VALUE, OFFSET_VALUE ));
220 log.warn(
"Change type and value must be specified!");
NetworkChangeEvent currentEvent
static ChangeValue newNetworkChangeType(String typeStr, String valueStr)
void setFlowCapacityChange(ChangeValue flowCapacityChange)
void setFreespeedChange(ChangeValue freespeedChange)
final List< NetworkChangeEvent > events
void startTag(String name, Attributes atts, Stack< String > context)
static< T > Id< T > create(final long key, final Class< T > type)
static final double parseTime(final String time)
NetworkChangeEventsParser(Network network, List< NetworkChangeEvent > events)
Map< Id< Link >, ? extends Link > getLinks()
void endTag(String name, String content, Stack< String > context)
void setLanesChange(ChangeValue lanesChange)