20 package org.matsim.core.config;
29 import java.util.ArrayDeque;
30 import java.util.Deque;
31 import java.util.Stack;
33 import org.apache.logging.log4j.LogManager;
34 import org.apache.logging.log4j.Logger;
36 import org.xml.sax.Attributes;
42 class ConfigReaderMatsimV2
extends MatsimXmlParser {
43 private final static Logger LOG = LogManager.getLogger(ConfigReaderMatsimV2.class);
45 private final Config config;
47 private final ConfigAliases aliases;
48 private final Deque<ConfigGroup> moduleStack =
new ArrayDeque<>();
49 private final Deque<String> pathStack =
new ArrayDeque<>();
51 ConfigReaderMatsimV2(
final Config config) {
52 super(ValidationType.DTD_ONLY);
54 this.aliases =
new ConfigAliases();
57 ConfigReaderMatsimV2(
final Config config,
final ConfigAliases aliases) {
58 super(ValidationType.DTD_ONLY);
60 this.aliases = aliases;
63 public ConfigAliases getConfigAliases() {
70 final Attributes atts,
71 final Stack<String> context) {
73 if ( name.equals( MODULE ) ) {
76 else if ( name.equals( PARAMETER_SET ) ) {
77 startParameterSet(atts);
79 else if ( name.equals( PARAMETER ) ) {
82 else if ( !name.equals(
"config" ) ) {
85 throw new IllegalArgumentException(
"unknown tag "+name );
89 private void startParameter(
final Attributes atts) {
90 String name = this.aliases.resolveAlias(atts.getValue(NAME), this.pathStack);
91 this.moduleStack.getFirst().addParam(
93 atts.getValue( VALUE ) );
96 private void startParameterSet(
final Attributes atts) {
97 String type = this.aliases.resolveAlias(atts.getValue(TYPE), this.pathStack);
98 final ConfigGroup m = this.moduleStack.getFirst().createParameterSet( type );
99 this.moduleStack.addFirst(m);
100 this.pathStack.addFirst(m.getName());
103 private void startModule(
final Attributes atts) {
104 String name = this.aliases.resolveAlias(atts.getValue(NAME), this.pathStack);
105 ConfigGroup m = this.config.getModule(name);
107 m = this.config.createModule(name);
109 this.moduleStack.addFirst(m);
110 this.pathStack.addFirst(m.getName());
116 final String content,
117 final Stack<String> context) {
118 if ( name.equals( MODULE ) || name.equals( PARAMETER_SET ) ) {
119 final ConfigGroup head = this.moduleStack.removeFirst();
120 this.pathStack.removeFirst();
122 if ( !this.moduleStack.isEmpty() ) this.moduleStack.getFirst().addParameterSet( head );