public String substitute()

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.");
    }