MATSIM
ConfigAliases.java
Go to the documentation of this file.
1 package org.matsim.core.config;
2 
3 import org.apache.logging.log4j.LogManager;
4 import org.apache.logging.log4j.Logger;
5 
6 import java.util.ArrayList;
7 import java.util.Deque;
8 import java.util.HashMap;
9 import java.util.Iterator;
10 import java.util.List;
11 import java.util.Map;
12 import java.util.stream.Collectors;
13 
14 public final class ConfigAliases {
15 
16  private final static Logger LOG = LogManager.getLogger(ConfigAliases.class);
17 
18  private final Map<String, List<ConfigAlias>> aliases = new HashMap<>();
19 
20  public ConfigAliases() {
21  this.addDefaultAliases();
22  }
23 
24  public void addDefaultAliases() {
25  this.addAlias("ReplanningAnnealer", "replanningAnnealer");
26  this.addAlias("TimeAllocationMutator", "timeAllocationMutator");
27  this.addAlias("JDEQSim", "jdeqsim");
28  this.addAlias("controler", "controller");
29  this.addAlias("planCalcScore", "scoring");
30  this.addAlias("planscalcroute", "routing");
31  this.addAlias("strategy", "replanning");
32  this.addAlias("parallelEventHandling", "eventsManager");
33  this.addAlias("freight", "freightCarriers");
34 
35  this.addAlias("BrainExpBeta", "brainExpBeta", "scoring");
36  this.addAlias("PathSizeLogitBeta", "pathSizeLogitBeta", "scoring");
37  }
38 
39  public void addAlias(String oldName, String newName, String... path) {
40  this.aliases.computeIfAbsent(oldName, k -> new ArrayList<>(2)).add(new ConfigAlias(oldName, newName, path));
41  }
42 
43  public void clearAliases() {
44  this.aliases.clear();
45  }
46 
47  public String resolveAlias(String oldName, Deque<String> pathStack) {
48  List<ConfigAlias> definedAliases = this.aliases.get(oldName);
49  if (definedAliases == null || definedAliases.isEmpty()) {
50  return oldName;
51  }
52  for (ConfigAlias alias: definedAliases) {
53  boolean matches = true;
54 
55  if (alias.path.length > pathStack.size()) {
56  matches = false;
57  } else {
58  Iterator<String> iter = pathStack.iterator();
59  for (int i = alias.path.length - 1; i >= 0; i--) {
60  if (iter.hasNext()) {
61  String name = iter.next();
62  if (!name.equals(alias.path[i])) {
63  matches = false;
64  break;
65  }
66  } else {
67  matches = false;
68  break;
69  }
70  }
71  }
72 
73  if (matches) {
74  String stack = pathStack.stream().collect(Collectors.joining(" < ", oldName + " < ", " /"));
75  LOG.warn("Config name '{}' is deprecated, please use '{}' instead. Config path: {}", oldName, alias.newName, stack);
76  return alias.newName;
77  }
78  }
79  return oldName;
80  }
81 
82  public record ConfigAlias(String oldName, String newName, String[] path) {
83  }
84 
85 }
String resolveAlias(String oldName, Deque< String > pathStack)
final Map< String, List< ConfigAlias > > aliases
void addAlias(String oldName, String newName, String... path)
record ConfigAlias(String oldName, String newName, String[] path)