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();
}