static String substitute()

in spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/MappingExpr.java [46:89]


  static String substitute(String pattern, Map<String, String> vars) {
    int openBracePos = pattern.indexOf('{');
    if (openBracePos == -1) {
      return pattern;
    }

    int closeBracePos = pattern.indexOf('}', openBracePos);
    if (closeBracePos == -1) {
      return pattern;
    }

    StringBuilder builder = new StringBuilder(pattern.length());
    int startPos = 0;
    while (startPos < pattern.length()) {
      builder.append(pattern, startPos, openBracePos);
      String var = pattern.substring(openBracePos + 1, closeBracePos);
      boolean useRawValue = var.startsWith("raw:");
      String value = useRawValue
        ? vars.get(var.substring("raw:".length()))
        : vars.get(var);
      if (value == null) {
        builder.append('{').append(var).append('}');
      } else {
        builder.append(useRawValue ? value : Introspector.decapitalize(value));
      }

      startPos = closeBracePos + 1;
      openBracePos = pattern.indexOf('{', startPos);
      if (openBracePos == -1) {
        break;
      }

      closeBracePos = pattern.indexOf('}', openBracePos);
      if (closeBracePos == -1) {
        break;
      }
    }

    if (startPos < pattern.length()) {
      builder.append(pattern, startPos, pattern.length());
    }

    return builder.toString();
  }