in java/main/src/main/java/com/epam/deltix/utilities/VariablesMapper.java [266:295]
public String substitute(String path, final int maxIter, final int maxLength, final boolean throwOnUnresolved) {
for (int si = 0; si < maxIter; ++si) {
final Matcher matcher = varPattern.matcher(path);
boolean isAnySubstituted = false;
while (matcher.find()) {
final String varName = matcher.group(1);
final String varValue = get(varName);
if (varValue == null) {
if (throwOnUnresolved)
throw new RuntimeException("Can't resolve '" + varName + "' variable.");
continue;
}
final long nextPathLength = (long) matcher.start() + varValue.length() + (path.length() - matcher.end());
if (nextPathLength > maxLength)
throw new RuntimeException("The resulting path is too long.");
path = path.substring(0, matcher.start()) + varValue + path.substring(matcher.end());
isAnySubstituted = true;
break;
}
if (!isAnySubstituted)
return path;
}
throw new RuntimeException("Too many substitutions. Cyclic substitutions are possible.");
}